Bonjour,
Comment faire pour supprimer une ligne dans Excel a l'aide de VBA.
Merci par avance .
Version imprimable
Bonjour,
Comment faire pour supprimer une ligne dans Excel a l'aide de VBA.
Merci par avance .
Pour supprimer une ligne Excel avec VBA, il y a plusieurs possibilités :
- appuyer sur F1
ou
- appuyer ici
ou
- tomber sur quelqu'un de gentil qui ne part pas manger maintenant :yaisse2:
De rien,
Code:
1
2
3 Rows(i).Select Selection.Delete Shift:=xlUp
Merci, pour ta réponse. En fait je dois te dire que je ne suis pas vraiment un developpeur VBA, mais plutot JAVA.
J'ai actuellement une feuille excell, ou je dois effacer certaines lignes. Je dois normalement commencer a partir de la deuxième ligne, et si cette ligne possède les critères pour être effacé, je dois vérifier la ligne précédente pour voir si elle a des caractéristiques commune avec la ligne en cours, et si oui, les deux lignes sont supprimés, sinon seulement la ligne en cours l'est.
Et la j'avoue que mes connaissance en Java ne m'aide pas trop ici.
Je ne sais pas si j'ai été assez clair, si oui, peux tu m'orienter un peu stp.
Merci par avance.
C'est pas encore l'heure, alors une idée : Montre ton code qu'on puisse adater, c'est plus rapide que d'avoir à tout réécrire ;)
Déjà, jète un oeil là pour connaître la dernière ligne de la plage à examiner.
Une fois que tu connais la dernière ligne, on pourra en déduire la plage.
Avec la plage, on peut faire une boucle. Pour l'idée :
A+Code:
1
2
3
4
5
6
7
8
9
10
11
12 Sub EffacerLesDoublons() 'efface deux lignes à la fois Dim Plage As Range, Cell As Range Set Plage = Range("A2:A18") For Each Cell In Plage If Cell.Value = Cell.Offset(-1, 0) Then Cell.Offset(-1, 0).EntireRow.Delete Cell.EntireRow.Delete End If Next Set Plage = Nothing End Sub
Edit
Pour établir la plage avec DerniereLigne
Code:
1
2
3 DerniereLigne = 18 'Set Plage = Range("A2:A18") 'que tu remplaces par Set Plage = Range("A2:A" & DerniereLigne)
J'y vois un peu plus clair.
Je n'ai pas encore entrer de code car je ne voulais pas n'importe quoi.
En fait ma feuille est constitué de colonnes allant de A jusqu'a O.
Voici en gros l'algorithme.
On doit parcourir la feuille en entier en commençant par la ligne numéro 2.
Pour chaque ligne x (x représentant le numéro de la ligne), voir si le contenu de la colonne B (Bx), voir si Bx<>"01" :
Si c'est le cas alors voir si le contenu de Cx-1=Cx (équivalent a voir si le contenu de la colonne C de la ligne précédente est égale au contenu de la Colonne C de la ligne en cours, c'est également pour cela que l'on commence a partir de la ligne numéro 2) &&(ET logique) voir si Dx-1=Dx (même explication que précedemment)
Si c'est deux condition sont vérifiées alors effacer la ligne x et la ligne x-1 soit la ligne en cours et la ligne précédente.
Sinon effacer uniquement la ligne en cours celle ou la valeur de Bx="01".
Continuer jusqu'a la fin de la feuille.
J'espère avoir été un peu plus clair. En tout cas merci pour votre aide.
Regarde si les conditions sont les bonnes (tu mets une fois <> "01" puis "celle ou la valeur de Bx="01"
Et puis tu testes
A+Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Sub EffacerLesDoublons() 'efface deux lignes à la fois ou une seule... Dim Plage As Range, Cell As Range DerniereLigne = 18 'Set Plage = Range("B2:B18") Set Plage = Range("B2:B" & DerniereLigne) For Each Cell In Plage If Cell.Value = "01" Then 'ou <> "01" ? If Cell.Offset(0, 1).Value = Cell.Offset(-1, 1).Value _ And Cell.Offset(0, 2).Value = Cell.Offset(-1, 2).Value Then Cell.Offset(-1, 0).EntireRow.Delete Cell.EntireRow.Delete Else Cell.EntireRow.Delete ' si Cell.value = "01" End If End If Next Set Plage = Nothing End Sub
Génial. C'est parfaitement ça.
Comment faire pour intégrer ce programme sur ma feuille excel stp.
Merci.
Désolé mais là je dois partir. :(
Bonne chance
Ok, merci tout de même.
Dès que tu peux, si tu as la réponse, peux tu me la mettre.
Merci par avance.
Tu copies-colles la procédure EffacerLesDoublons dans un module de ta feuille Excel. (Alt + F11, puis dans le volet d'exploration de projets, tu crées un nouveau module(clic droit, ajouter module))
Ensuite tu peux créer un bouton avec la barre de menu formulaire, et affecter la macro au bouton crée.
Ok, peux tu être un peu plus explicite stp, je ne suis pas vraiment un habitué d'excel, je suis vraiment un pure novice.
Merci.
Je ne suis pas un pro, je vais t'expliquer simplement comment utiliser le code ci-dessus dans ta feuille Excel.
(sinon il y a de très bons tutoriaux pour débutants à cette adresse)
Dans le menu Outils, sous-menu Macro, choisis Editeur Visual Basic.
Menu affichage, Explorateur de projets (Project Explorer en anglais).
Dans ton projet VBA (celui au nom de ton classeur), clic droit, ajouter, module.
Là tu as une page blanche qui s'ouvre, tu y copies le code ci-dessus. Le nom de ta procédure est EffacerLesDoublons.
Retour sous Excel.
Pour utiliser ensuite cette "macro", on va affecter la procédure à un bouton : si tu clic sur le bouton, la procédure se lance.
Affiche la barre d'outils formulaires, il y a un rectangle (Surface de commande, ou qqch comme ca). Dessine un rectangle, normalement dès que tu relâches, une fenêtre s'ouvre et Excel te propose de lier ce bouton à uns macro. Choisis EffacerLesDoublons.
Appuyer sur le bouton.
Servir bien frais, accompagné d'un peu de glace vanille.
:oops:
Merci a toi, je vais l'essayer tout de suite.
Thank's
Apparement il y a un probleme dans le code.
En effet il supprime bien les lignes qu'ils faut, mais quand on a une serie de lignes successives a supprimer, le programme ne supprime que la première. Je pense que le problème vient de la boucle for, car il s'incrémente au fur et a mesure alors que lors de la suppression d'une ligne x, la ligne x+1 prend comme valeur x. Ce qui fait qu'a la prochaine itération si l'ancienne ligne qui avait pour valeur x+1, doit être supprimé elle est sauté vu qu'elle a maintenant pour valeur x, et que le compteur est a x+1. Alors cher amis, comment faire ?
Ok. Au départ, on était parti pour deux ligne successives, ce que mon code fait. "A l'époque" on ne parlais pas de trois ou qutre ou cinq...
Dans ce cas là, il faut partir à l'envers.
On commence par compter les lignes et on se place sur la dernière
Fait les yeux fermés, à tester ;)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 For i = DerniereLigne to 2 step - 1 If Cells(i,2).Value = "01" Then 'ou <> "01" ? If Cells(i, 2).Offset(0, 1).Value = Cells(i - 1, 3).Value _ And Cells(i, 4).Value = Cells(i -1, 4).Value Then Rows(i-1).Delete 'on supprime la ligne du dessus Rows(i-1).Delete 'la ligne courante devient "la ligne du dessus" i = i - 1 '****** explication oiseuse après le code ****** Else Rows(i-1).Delete i = i - 1 ' ********peut-être à supprimer End If End If Next
* On est sur la ligne 18, on supprime la 17, la 18 devient la 17, on la "re" supprime. On reste sur la 17... C'est peut-être bien i - 1 et non i - 2
Désolé, je suis fatigué... :(
Encore une fois, c'est parfait.
A partir de ton code, j'ai fait les modifications nécessaires et cela fonctionne parfaitement.
Grand, grand merci pour ton aide.