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
- Word et excel gratuit - Guide
- Verrouiller cellule excel sans verrouiller la feuille - Guide
- Écrire plusieurs lignes dans une cellule excel mac - 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
Private Sub ListBox1_Change() Dim Lign As Long, DerniereLigne As Long With Sheets("NomDeTaFeuilleEntreGuillemets") 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 With End SubC'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 :
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 If Cells(i, 5) = "Total CDD 2011" Then Rows(i).Delete If Cells(i, 5) = "Total INT 2011" Then Rows(i).Delete If Cells(i, 5) = "Total MO 2011" Then Rows(i).Delete If Cells(i, 12) = "+ Prov manuelles SAP" Then Rows(i).Delete 'etc.... 'tu peux même utiliser l'opérateur OR comme ceci : If Cells(i, 5) = "R 2011 SAP" Or Cells(o, 12) = "Taxes fiscales" Then Rows(n).Delete Next iTu 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 :
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 End If Next iS'écrit :
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 End If Next iOK?
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é.