XL 2016 Boucle for next - suppression de ligne

madmoizelle.zu

XLDnaute Nouveau
Bonjour,
Je suis confuse car j'utilise ceci et ca fonctionne bien, toutes les occurrences sont trouvées.

VB:
With Sheets("Données")
    For lig = 2 To .Range("A65536").End(xlUp).Row
        If .Cells(lig, 3) = Nomprojet Then
            .Cells(lig, 13) = "non"
         End If
         Next lig
End With

Par contre, quand je veux supprimer la ligne, la boucle s'arrête après la première occurrence.

Code:
With Sheets("Données")
    For lig = 2 To .Range("A65536").End(xlUp).Row
        If .Cells(lig, 3) = Nomprojet Then
            .Cells(lig, 13).EntireRow.Delete
         End If
         Next lig
End With

Je ne comprends pas mon erreur.. Merci de m'aider!!
 
Solution
Bonjour madmoizelle.zu,

bonne année 2021, et bienvenue sur le site XLD ! 🥳

pour une suppression de ligne, la boucle doit être faite
de bas en haut, sinon ça gêne le compteur de boucle.


VB:
Option Explicit

Sub Essai()
  Dim Nomprojet$, dlg&, lig&
  With Worksheets("Données")
    dlg = .Cells(Rows.Count, 1).End(3).Row: If dlg = 1 Then Exit Sub
    Nomprojet = "Nom du projet" 'à adapter ; si c'est une cellule de
    'la feuille "Données", ne pas oublier de mettre un point devant.
    'exemple : Nomprojet = .[A1]
    Application.ScreenUpdating = 0
    For lig = dlg To 2 Step -1
      If .Cells(lig, 3) = Nomprojet Then .Rows(lig).Delete
    Next lig
  End With
End Sub

soan

soan

XLDnaute Barbatruc
Inactif
Bonjour madmoizelle.zu,

bonne année 2021, et bienvenue sur le site XLD ! 🥳

pour une suppression de ligne, la boucle doit être faite
de bas en haut, sinon ça gêne le compteur de boucle.


VB:
Option Explicit

Sub Essai()
  Dim Nomprojet$, dlg&, lig&
  With Worksheets("Données")
    dlg = .Cells(Rows.Count, 1).End(3).Row: If dlg = 1 Then Exit Sub
    Nomprojet = "Nom du projet" 'à adapter ; si c'est une cellule de
    'la feuille "Données", ne pas oublier de mettre un point devant.
    'exemple : Nomprojet = .[A1]
    Application.ScreenUpdating = 0
    For lig = dlg To 2 Step -1
      If .Cells(lig, 3) = Nomprojet Then .Rows(lig).Delete
    Next lig
  End With
End Sub

soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour @job75, (ce post est aussi pour @madmoizelle.zu)

moi, j'retiens facilement que c'est 1 2 3 4 pour gauche droite haut bas :
c'est dans le même ordre que quand tu vas à l'église et que tu fais le
signe de croix, lolllllllll ! 🤣 mais bien sûr, chacun ses goûts : j'oblige
personne à utiliser les chiffres au lieu des constantes lettres. ;)

note que 1 2 3 4 est tout de même plus facile que :
-4159 = xlToLeft ; -4161 = xlToRight ;
-4162 = xlUp ; -4121 = xlDown


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonsoir mapomme,

:oops: ooooppppsss ! oui, tu as raison, ça remonte à Mathusalem !

mea culpa ! j'vais être absent pour très longtemps : j'vais aller
faire pénitence et parcourir le Chemin de Saint-Jacques de
Compostelle ! 😅 😇 (retour prévu dans environ 1 an ou 2)




faudrait qu'je trouve un autre code mnémotechnique, mais maint'nant,
j'y suis très habitué ! alors j'oublierai quand même pas que 1 2 3 4 =
gauche droite haut bas.


soan
 

soan

XLDnaute Barbatruc
Inactif
@job75

moi, j'y vois un autre intérêt : c'est plus court à écrire et à lire !

2 autres exemples, pour le mode de calcul :

-4135 au lieu de xlManual
-4105 au lieu de xlAutomatic

à force d'les utiliser, j'les connaît par cœur ; mais encore
une fois, c'est « chacun selon ses goûts ». 😜


soan
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, madame zu, soan, mapomme, job75

Sans boucle, ni d'or, ni de ceinture mais emprunté à job75
(dans une de ses réponses de novembre 2020)
VB:
Const NomProjet As String = "BlairWitch"
Sub Supprimer()
Application.ScreenUpdating = False
With ActiveSheet.UsedRange
    .Columns(2).EntireColumn.Insert 'insère une colonne auxiliaire
    With .Columns(2)
        .FormulaR1C1 = "=IF(RC[2]=" & Chr(34) & NomProjet & Chr(34) & ",0,""1$1"")"
        .Value = .Value 'supprime les formules
        .EntireRow.Sort .Cells, xlDescending  'tri pour regrouper et accélérer
        On Error Resume Next 'si aucune SpecialCell
        .SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete
        .EntireColumn.Delete 'supprime la colonne auxiliaire
    End With
End With
With ActiveSheet.UsedRange: End With 'actualise les barres de défilement
End Sub
NB: Adapter le nom du projet dans la Constante ;)
 

job75

XLDnaute Barbatruc
Bonsoir JM,

Oui pour préciser xlCellTypeConstants ou xlCellTypeFormulas je ne connais pas les constantes explicites.

Ma mémoire retient seulement 1 => nombres, 2 => textes, 16 =>erreurs.

Donc en effet les chiffres sont parfois utiles.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 117
Membres
103 121
dernier inscrit
SophieS