Macro pour supprimer des lignes d'un tableau à partir de valeur - VB/VBA/VBS - Programmation
Marsh Posté le 14-08-2007 à 19:19:49
 
tu vas devoir 
recuperer les valeurs 
msgbox ; len ; mid ; instr ( si tu rentres 1;409;150) 
recuperer les lignes correspondantes 
puis supprimer 
 
 
et pour l'ensemble utiliser ces structures 
for i=1 to 15000 i etant le num de ligne 
next 
un if  (ton test)  then (suppression)else 
 
avec l'enregisteur de macro donne nous un bout de code mais ca metnnerai que quelqu'un te donne la solution toute faite 
 
bon courage 
a+ 
 
Marsh Posté le 14-08-2007 à 19:53:48
| 86vomito33 a écrit :   | 
 
 
Bonsoir, 
 
Merci de ton attention...  
 
Mais il est vrai que j'ai oublié de préciser que mes notions sont limitées. 
J 'espèrais profiter de l'expérience des autres, n'ayant pas les capacités suffisantes pour maîtriser les macros sous excel, 
 
En disant que personne ne donnera une solution toute faite veux-tu dire que la solution est trop hardue ? 
Ou bien que l'on n'accepte pas de donner de solution sans proposition ? 
 
Bonne soirée...
Marsh Posté le 14-08-2007 à 21:51:52
Bonsoir, 
 
selectionnes avec la touche ctrl   les valeurs que tu veux voir disparaître (les premières de chaque, pas toutes) 
lance la macro suivante 
 
Sub clear() 
Dim ddr(5) 
 
i = 0 
For Each dd In Selection 
i = i + 1 
ddr(i) = dd.Value 
 
Next 
For j = 1 To i 
With Worksheets(1).Range("a:a" ) 
    Set c = .Find(ddr(j), LookIn:=xlValues) 
    If Not c Is Nothing Then 
        firstAddress = c.Address 
        Do 
         
        rr = c.Row 
        Range("A" & rr - 1 & ":A" & rr + 1).Select 
        Selection.EntireRow.Select 
        Selection.Delete 
            Set c = .Find(ddr(j), LookIn:=xlValues) 
        Loop While Not c Is Nothing 
    End If 
End With 
Next j 
End Sub 
 
Si tu as un soucis pour la selection multiple, on pourra faire par question 
Cordialement
Marsh Posté le 15-08-2007 à 00:34:21
Bonsoir, 
 
Merci pour ton aide. 
 
Cela fonctionne parfaitement...   
  
 
Mais peut-on remplacer la sélection multiple par une série de valeur correspondante aux valeurs dans mes cellules sélectionnées ?  
  
 
Cordialement 
Marsh Posté le 15-08-2007 à 07:53:14
Bonjour, 
oui 
c'est ce que suggérait 86vomito33  
 
Sub clear() 
Dim ddr() As String 
ib = InputBox("entrer les valeurs séparées par des ;  " ) 
 ddr = Split(ib, ";" ) 
  
i = UBound(ddr) 
For j = 0 To i 
With Worksheets(1).Range("a:a" ) 
    Set c = .Find(ddr(j), LookIn:=xlValues) 
    If Not c Is Nothing Then 
        firstAddress = c.Address 
        Do 
          
        rr = c.Row 
        Range("A" & rr - 1 & ":A" & rr + 1).Select 
        Selection.EntireRow.Select 
        Selection.Delete 
            Set c = .Find(ddr(j), LookIn:=xlValues) 
        Loop While Not c Is Nothing 
    End If 
End With 
Next j 
End Sub 
 
 
Cordialement
Marsh Posté le 15-08-2007 à 12:45:44
| seniorpapou a écrit : Bonjour,  | 
 
 
 
Bonjour Seniorpapou, 
 
 
Tout simplement génial !!!!  
 
Un très grand merci, pour un grand Monsieur.  
 
J'aimerais trouvé le temps d'apprendre mais je pars de trop loin... 
 
Une dernière petite question si je n'abuse pas trop de ton temps. 
 
Si au lieu de la boîte de dialogue qui demande les valeurs; je voulais mettre ces valeurs directement dans la macro (toujours les même lignes avec les même valeurs à supprimer). 
Comment faudrait-il la modifier? 
 
Mille fois Merci et bonne journée 
 
Cordialement
Marsh Posté le 15-08-2007 à 13:56:44
 
 
Sub clear() Dim ddr() As String  
ib = InputBox("entrer les valeurs séparées par des ;  " ) 
 ddr = Split(ib, ";" )
dim ddr() as string 
ddr(1)="1" 
ddr(2)="408" 
etc... 
  
i = UBound(ddr) 
For j = 0 To i 
With Worksheets(1).Range("a:a" ) 
    Set c = .Find(ddr(j), LookIn:=xlValues) 
    If Not c Is Nothing Then 
        firstAddress = c.Address 
        Do 
          
        rr = c.Row 
        Range("A" & rr - 1 & ":A" & rr + 1).Select 
        Selection.EntireRow.Select 
        Selection.Delete 
            Set c = .Find(ddr(j), LookIn:=xlValues) 
        Loop While Not c Is Nothing 
    End If 
End With 
Next j 
End Sub 
 
 
Cordialement
Marsh Posté le 15-08-2007 à 18:32:44
Bonjour, 
 
Je voudrais réaliser une macro Excel qui viendrait chercher une liste de valeurs (coordonnées X&Y) et à l'aide d'un bouton je pourrais visualiser sur un graphique le tracé point par point afin de visualiser l'ensemble obtenue 
 
Quelqu'un aurait ca sous la main. Je ne suis pas bon en VBA et c'est quelque chose que j'aurais vraiment besoin... 
Marsh Posté le 15-08-2007 à 19:56:51
| 86vomito33 a écrit :   | 
 
 
 
Bonsoir, 
 
Merci de ton aide 86vomito33, mais cela ne marche pas... 
 
Le débogueur s'arrête sur la ligne ddr(1)="1". et le message est "l'indice n'appartient pas à la sélection" !!! 
 
Tu comprends pourquoi ??? 
 
Merci... 
 
Cordialement
Marsh Posté le 15-08-2007 à 20:31:19
| 86vomito33 a écrit : mets ddr(150) as string et c marche | 
 
 
J'ai fait comme tu m'as dit mais cela ne fonctionne pas ...  
 
399 et 761 sont les valeurs des lignes à supprimer.  
 
Sub clear() 
ddr(150) As String 
ddr(1) = "399" 
ddr(2) = "761" 
 
  
i = UBound(ddr) 
For j = 0 To i 
With Worksheets(1).Range("a:a" ) 
    Set c = .Find(ddr(j), LookIn:=xlValues) 
    If Not c Is Nothing Then 
        firstAddress = c.Address 
        Do 
          
        rr = c.Row 
        Range("A" & rr - 1 & ":A" & rr + 1).Select 
        Selection.EntireRow.Select 
        Selection.Delete 
            Set c = .Find(ddr(j), LookIn:=xlValues) 
        Loop While Not c Is Nothing 
    End If 
End With 
Next j 
End Sub 
 
 
Cordialement
Marsh Posté le 15-08-2007 à 20:38:58
ReplyMarsh Posté le 15-08-2007 à 20:57:13
| ju65 a écrit : C'est une déclaration que tu fais donc tu dois mettre :  | 
 
 
Bonsoir, 
 
Lorsque je mets Dim ddr(150) as string, la macro semble supprimer les trois premières lignes mais sans jamais s'arréter. 
Et tout mon tableau disparaît ??? 
 
Cordialement 
Marsh Posté le 16-08-2007 à 07:19:10
Bonjour, 
 
Dans la dernière proposition: i=150 
comme on démarre de j= 0 et que tes données commencent à 1,   on a: ddr(0)="", le find trouve la première ligne vide comme étant celle que l'on recherche, donc on efface  
la premiére ligne vide , la suivante et la précédente qui est non vide et on recommence. 
 
je te propose: 
 
Sub clear() 
 
 Dim ddr As Variant 
 ddr = Array(399, 761) 
 
 'ddr = Array("399", "761" )  est aussi utilisable lorsque la zone est une zone texte 
   
i = UBound(ddr) 
For j = 0 To i 
With Worksheets(1).Range("a:a" ) 
    Set c = .Find(ddr(j), LookIn:=xlValues) 
    If Not c Is Nothing Then 
        'firstAddress = c.Address    inutile (vient d'un copier collé mal fait de ma part) 
        Do 
         rr = c.Row 
         Range("A" & rr - 1 & ":A" & rr + 1).Select 
         Selection.EntireRow.Select 
         Selection.Delete 
         Set c = .Find(ddr(j), LookIn:=xlValues) 
        Loop While Not c Is Nothing 
    End If 
End With 
Next j 
End Sub 
 
 
Cordialement
Marsh Posté le 16-08-2007 à 07:51:20
| seniorpapou a écrit : Bonjour,  | 
 
 
Bonjour Seniorpapou, 
 
Merci cela fonctionne en partie car cela me supprime aussi des lignes avec des valeurs non déclarées. 
 
Voici mon code avec toutes les valeurs à supprimer... 
 
Sub clear() 
  
 Dim ddr As Variant 
 ddr = Array(5, 13, 409, 410, 411, 413, 414, 416, 417, 418, 419, 421, 432, 768, 771, 924) 
  
 'ddr = Array("5", "409" )  est aussi utilisable lorsque la zone est une zone texte 
    
i = UBound(ddr) 
For j = 0 To i 
With Worksheets(1).Range("a:a" ) 
    Set c = .Find(ddr(j), LookIn:=xlValues) 
    If Not c Is Nothing Then 
        'firstAddress = c.Address    inutile (vient d'un copier collé mal fait de ma part) 
        Do 
         rr = c.Row 
         Range("A" & rr - 1 & ":A" & rr + 1).Select 
         Selection.EntireRow.Select 
         Selection.Delete 
         Set c = .Find(ddr(j), LookIn:=xlValues) 
        Loop While Not c Is Nothing 
    End If 
End With 
Next j 
End Sub 
 
J'ai l'impression que cela me supprime des lignes où les chiffrescontenus correspondent à certaines valeurs déclarées. 
exemple supprime 185, 285, 385, 751, 501 pour la valeur 5, 613 pour la valeur 13 etc...  
 
Vois-tu une solution ? 
 
Merci encore. 
 
Cordialement
Marsh Posté le 16-08-2007 à 10:20:01
bonjour, 
essaie en remplaçant laligne: Set c = .Find(ddr(j),  LookIn:=xlValues) 
 
par  Set c = .Find(ddr(j), lookat:=xlWhole, LookIn:=xlValues) 
 
mais je suis étonné, j'ai testé avec des valeurs identiques,  elles ne sont pas supprimées. 
peux-tu nous mettre par cjoin.com un fichier avec la premiére colonne seulement.? 
Cordialement 
Marsh Posté le 16-08-2007 à 11:57:47
| seniorpapou a écrit : bonjour,  | 
 
 
Alors là Bravo... cela marche parfaitement !!!  
   
   
  
 
Voici un exemple de mon tableau avec la 1ère colonne (je n'ai pas réussi avec cjoin.com) 
  
 
 
[img=http://img175.imageshack.us/img175/7474/tableauem3.th.png] 
 
J'espère que c'est assez lisible. 
 
Merci Seniorpapou...
Marsh Posté le 16-08-2007 à 12:41:59
Re, 
 
content que cela fonctionne 
Ton tableau, c'était pour tester avec la vraie structure, mais ce n'est plus nécessaire puisque cela fonctionne 
@+
Marsh Posté le 16-08-2007 à 13:35:59
| seniorpapou a écrit : Re,  | 
 
 
Encore merci pour ton aide. 
 
Celav va me simplifier la vie...  
   
   
  
Marsh Posté le 14-08-2007 à 17:48:00
Bonsoir à tous,
 
 
Voici mon tableau :
Quelqu'un pourrait-il m'aider pour créer une macro toute simple sous excel qui supprimerait dans la 1ère colonne, les lignes contenant les valeurs 5 et 409 ainsi que les lignes se trouvant juste au dessus et au dessous de ces valeurs. (sachant que je veux supprimer ces lignes sur toute la largeur de mon tableau qui comprend plus de deux colonnes).
Je veux pouvoir modifier ensuite cette macro pour d'autres valeurs que 5 et 409...
Merci d'avance et bonne soirée.
brutor2
Message édité par brutor2 le 14-08-2007 à 17:48:16