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