Suppresion lignes dans feuille excel
Résolu
Mag55
-
Mag55 -
Mag55 -
Bonjour,
Je rencontre un petit soucis avec une macro que j'essaie inlassablement de faire tourner. Elle est la suivante :
Private Sub ListBox1_Change()
Dim i As Long
For i = Range("E14") To Range("E1000")
If Cells(i, 5) = "Total CDI 2011" Then Rows(i).Delete
Next i
'Cellule liée à la sélection ds boîte de dialogue
Range("$A$2").Value = ListBox1.Value
End Sub
En fait, j'aimerais qu'à chaque changement de sélection dans ma boîte de dialogue, VBA me supprime la ligne contenant "Total CDI 2011" qui ne peut se trouver qu'en colonne 5.
J'ai réduit la plage de données pour ne pas la faire tourner trop longtemps.
Mais il doit y avoir un soucis quelque part car elle ne fonctionne pas.
J'appelle donc comme d'habitude à vos talents pour me venir en aide!
Merci
Je rencontre un petit soucis avec une macro que j'essaie inlassablement de faire tourner. Elle est la suivante :
Private Sub ListBox1_Change()
Dim i As Long
For i = Range("E14") To Range("E1000")
If Cells(i, 5) = "Total CDI 2011" Then Rows(i).Delete
Next i
'Cellule liée à la sélection ds boîte de dialogue
Range("$A$2").Value = ListBox1.Value
End Sub
En fait, j'aimerais qu'à chaque changement de sélection dans ma boîte de dialogue, VBA me supprime la ligne contenant "Total CDI 2011" qui ne peut se trouver qu'en colonne 5.
J'ai réduit la plage de données pour ne pas la faire tourner trop longtemps.
Mais il doit y avoir un soucis quelque part car elle ne fonctionne pas.
J'appelle donc comme d'habitude à vos talents pour me venir en aide!
Merci
A voir également:
- Suppresion lignes dans feuille excel
- Liste déroulante excel - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
- Verrouiller cellule excel sans verrouiller la feuille - Guide
1 réponse
Bonjour,
1- consulte tes messages privés,
2- Une boucle qui supprime des lignes doit toujours commencer par la dernière ligne et finir à la première, sinon la macro risque d'omettre certaines de ces lignes.
3- Pour obtenir le numéro de la dernière ligne non vide d'une colonne, Voyez cette merveilleuse astuce............
Donc, ton code devient :
OK???
Cordialement,
Franck P
1- consulte tes messages privés,
2- Une boucle qui supprime des lignes doit toujours commencer par la dernière ligne et finir à la première, sinon la macro risque d'omettre certaines de ces lignes.
3- Pour obtenir le numéro de la dernière ligne non vide d'une colonne, Voyez cette merveilleuse astuce............
Donc, ton code devient :
Private Sub ListBox1_Change() Dim Lign As Long, DerniereLigne As Long DerniereLigne = Range("E" & Rows.Count).End(xlUp).Row For Lign = DerniereLigne To 14 Step - 1 'ici on ne mets que les numéros de ligne If Cells(Lign, 5) = "Total CDI 2011" Then Rows(Lign).Delete Next Lign 'Cellule liée à la sélection ds boîte de dialogue Range("$A$2").Value = ListBox1.Value End Sub
OK???
Cordialement,
Franck P
C'est fou, j'ai réussi à faire tourner une macro pendant une dizaine de minutes puis sans rien changer depuis, une erreur s'affiche : Incompatibilité de type avec la macro suivante :
Private Sub ListBox1_Change()
Dim i As Long
For i = Range("E65536").End(xlUp).Row To 2 Step -1
If Cells(i, 5) = "Total CDI 2011" Then Rows(i).Delete
Next i
Dim j As Long
For j = Range("E65536").End(xlUp).Row To 2 Step -1
If Cells(j, 5) = "Total CDD 2011" Then Rows(j).Delete
Next j
Dim k As Long
For k = Range("E65536").End(xlUp).Row To 2 Step -1
If Cells(k, 5) = "Total INT 2011" Then Rows(k).Delete
Next k
Dim l As Long
For l = Range("E65536").End(xlUp).Row To 2 Step -1
If Cells(l, 5) = "Total MO 2011" Then Rows(l).Delete
Next l
Dim m As Long
For m = Range("L65536").End(xlUp).Row To 2 Step -1
If Cells(m, 12) = "+ Prov manuelles SAP" Then Rows(m).Delete
Next m
Dim n As Long
For n = Range("E65536").End(xlUp).Row To 2 Step -1
If Cells(n, 5) = "R 2011 SAP" Then Rows(n).Delete
Next n
Dim o As Long
For o = Range("L65536").End(xlUp).Row To 2 Step -1
If Cells(o, 12) = "Taxes fiscales" Then Rows(o).Delete
Next o
'Cellule liée à la sélection ds boîte de dialogue
Range("$A$2").Value = ListBox1.Value
End Sub
Du coup, je vais essayer la tienne sans plus attendre mais aimerais tout de même comprendre pourquoi la macro ne marche plus...
2- pourquoi boucler sur les mêmes lignes autant de fois???
Tu peux le faire en 1 seule boucle :
Si la cellule est égale à ceci ET si la cellule est égale à cela etc... Alors
Par exemple :
Tu y gagnes en temps d'exécution, la boucle ne se fait qu'une seule fois...
3- N'utilises plus des variables à un seul caractère. Une variable doit être explicite. On doit vior au premier coup d'oeil que tu boucles sur des lignes (et non pas des colonnes ou des artichauds)
Dans cette boucle, je remplacerais, perso, les i par des Lign. Tu avoueras que c'est beaucoup plus parlant.
En règle générale, une variable est composée d'au moins 3 caractères et commence par une majuscule. Il est préférable également d'indiquer, dans son nom, le type de variable.
Exemple d'une variable de type String censée représenter des noms de feuilles :
4- Lorsque l'on créé du code en VBA il est également d'usage de l'indenter (mettre des retraits en débuts de lignes pour les boucles, les If End If, less With End With Etc...).
Ainsi :
S'écrit :
OK?
Private Sub ListBox1_Change()
Dim Lign As Long
For Lign = Range("E65536").End(xlUp).Row To 2 Step -1
If Cells(Lign, 5) = "Total CDI 2011" Then Rows(Lign).Delete
If Cells(Lign, 5) = "Total CDD 2011" Then Rows(Lign).Delete
If Cells(Lign, 5) = "Total INT 2011" Then Rows(Lign).Delete
If Cells(Lign, 5) = "Total MO 2011" Then Rows(Lign).Delete
If Cells(Lign, 12) = "+ Prov manuelles SAP" Then Rows(Lign).Delete
Next Lign
'Cellule liée à la sélection ds boîte de dialogue
Range("$A$2").Value = ListBox1.Value
Il me surligne If Cells(Lign, 5) = "Total CDI 2011" Then
Effectivement, la démarche que tu m'as donné est de loin plus claire !! Les compétences m'ont manqué pour la raccourcir comme tu me l'as proposé.