Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1512 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro pour supprimer des lignes d'un tableau à partir de valeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Macro pour supprimer des lignes d'un tableau à partir de valeur

n°1599528
brutor2
Posté le 14-08-2007 à 17:48:00  profilanswer
 

Bonsoir à tous,
 
Voici mon tableau :
 
http://img142.imageshack.us/img142/6827/macroexcelxt0.th.png
 
 
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
mood
Publicité
Posté le 14-08-2007 à 17:48:00  profilanswer
 

n°1599556
86vomito33
Posté le 14-08-2007 à 19:19:49  profilanswer
 


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+
 

n°1599561
brutor2
Posté le 14-08-2007 à 19:53:48  profilanswer
 

86vomito33 a écrit :


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+
 


 
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...


Message édité par brutor2 le 14-08-2007 à 19:54:13
n°1599583
seniorpapo​u
Posté le 14-08-2007 à 21:51:52  profilanswer
 

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

n°1599643
brutor2
Posté le 15-08-2007 à 00:34:21  profilanswer
 

Bonsoir,
 
Merci pour ton aide.
 
Cela fonctionne parfaitement...  :bounce:  
 
Mais peut-on remplacer la sélection multiple par une série de valeur correspondante aux valeurs dans mes cellules sélectionnées ? :??:  
 
Cordialement

n°1599683
seniorpapo​u
Posté le 15-08-2007 à 07:53:14  profilanswer
 

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

n°1599754
brutor2
Posté le 15-08-2007 à 12:45:44  profilanswer
 

seniorpapou a écrit :

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


 
 
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

n°1599758
86vomito33
Posté le 15-08-2007 à 13:56:44  profilanswer
 


 
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

Message cité 1 fois
Message édité par 86vomito33 le 15-08-2007 à 13:57:36
n°1599785
petite_bes​tiole
Posté le 15-08-2007 à 18:32:44  profilanswer
 

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...

n°1599799
brutor2
Posté le 15-08-2007 à 19:56:51  profilanswer
 

86vomito33 a écrit :


 
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


 
 
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

mood
Publicité
Posté le 15-08-2007 à 19:56:51  profilanswer
 

n°1599802
86vomito33
Posté le 15-08-2007 à 20:09:20  profilanswer
 

mets ddr(150) as string et c marche

n°1599804
brutor2
Posté le 15-08-2007 à 20:31:19  profilanswer
 

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

n°1599805
ju65
Posté le 15-08-2007 à 20:38:58  profilanswer
 

C'est une déclaration que tu fais donc tu dois mettre :
 
Dim ddr(150) As String
 
 ;)  

n°1599807
brutor2
Posté le 15-08-2007 à 20:57:13  profilanswer
 

ju65 a écrit :

C'est une déclaration que tu fais donc tu dois mettre :
 
Dim ddr(150) As String
 
 ;)  


 
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

n°1599863
seniorpapo​u
Posté le 16-08-2007 à 07:19:10  profilanswer
 

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

Message cité 1 fois
Message édité par seniorpapou le 16-08-2007 à 07:22:36
n°1599864
brutor2
Posté le 16-08-2007 à 07:51:20  profilanswer
 

seniorpapou a écrit :

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


 
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


Message édité par brutor2 le 16-08-2007 à 08:05:44
n°1599906
seniorpapo​u
Posté le 16-08-2007 à 10:20:01  profilanswer
 

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

n°1599966
brutor2
Posté le 16-08-2007 à 11:57:47  profilanswer
 

seniorpapou a écrit :

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


 
Alors là Bravo... cela marche parfaitement !!! :bounce:  :bounce:  :bounce:  
 
Voici un exemple de mon tableau avec la 1ère colonne (je n'ai pas réussi avec cjoin.com)
 
http://img175.imageshack.us/img175/7474/tableauem3.th.png
 
[img=http://img175.imageshack.us/img175/7474/tableauem3.th.png]
 
J'espère que c'est assez lisible.
 
Merci Seniorpapou...


Message édité par brutor2 le 16-08-2007 à 11:58:53
n°1599983
seniorpapo​u
Posté le 16-08-2007 à 12:41:59  profilanswer
 

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
@+

n°1599997
brutor2
Posté le 16-08-2007 à 13:35:59  profilanswer
 

seniorpapou a écrit :

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
@+


 
Encore merci pour ton aide.
 
Celav va me simplifier la vie... :hello:  :hello:  :hello:  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro pour supprimer des lignes d'un tableau à partir de valeur

 

Sujets relatifs
executer du code a partir d'un fichier txtSmarty et tableau Mysql
remplir une msflexgrid à partir d'un fichier xmlTableau dynamiquement redimensionné
SQL Loader - Insérer une valeur par défautlecture d'un fichier xml à partir de vb 6.0
Macro Excel date et tableau croisé dynamiquerésultat d'une requete dans fichier que si requete retourne des lignes
créer un graph à partir de valeurs qui viennent de plusieurs feuilles 
Plus de sujets relatifs à : Macro pour supprimer des lignes d'un tableau à partir de valeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR