VBA - Sauter 1 step dans une boucle for

Bonjour à tous,

Je sais pas si ce que je veux faire est réalisable mais j'ai une boucle du type:

For Each Cel In plage2
    If ... Then
    End If
Next Cel

J'aimerais pouvoir intégrer une sorte de saut de step à l'intérieur de mon If. C'est-à-dire que si la condition est validée alors je souhaiterais qu'elle fasse deux fois next Cell en gros. M'avez-vous compris ? Si oui, est-ce possible ?

Merci d'avance,

SkillzZ

bjr,

For Each Cel In plage2
    If ... Then
    End If
Cel = Cel + 1
Next Cel

Bonjour M3ellem !

Merci beaucoup je ne pensais pas que c'était possible de cette manière. J'essaye ça tout de suite !

Merci encore

SkillzZ

Malheureusement ça ne fonctionne pas. C'est bien ce que je craignais, Cel n'est pas un chiffre il contient des éléments d'une plage qui sont des cellules mais je ne peux pas incrémenter de cette manière.. Une autre idée ?

Un fichier example?

Je ne peux malheureusement pas posté mon fichier ici, mais la partie de mon code qui pose problème est la suivante:

For Each Cel In Plage2
            i = Cel.Row
            If .Cells(i, 2).Value = Parent And .Cells(i, 4).Value = valeurcc And .Range("B" & i).Font.Bold = True Then
                C2_Desc = .Cells(i + 1, 5).Value
            If ICP = "Entities" Then
            .Range("A" & i).EntireRow.Insert
                        .Range("A" & i & ":" & "Z" & i).Font.Bold = False
                        .Cells(i, 2).Value = Account_Code
                        .Cells(i, 3).Value = Account_Desc
                        .Cells(i, 4).Value = valeurcc
                        .Cells(i, 5).Value = C2_Desc
                        .Cells(i, 6).Value = "[ICP None]"
                        .Cells(i, 8).Value = "B"
                        .Cells(i, 9).Value = "N"
                        .Range("J" & i).Interior.Color = RGB(255, 255, 196)
                        .Cells(i, 10).NumberFormat = "#,##0;(#,##0);-"
                        .Cells(i, 10).Value = "0"
                        .Range("M6").AutoFill Destination:=.Range("M6:M" & i)
                        .Range("O6").AutoFill Destination:=.Range("O6:O" & i)
                        Cel = Cel + 1
              End If
              End If
              Next Cel     
              

Je reçois une message d'erreur de type 13, Incompatibilité de type. Car Cel ne peut pas s'incrémenter de 1. Lorsque j'exécute pas à pas avec F8, mon curseur indique "CC50" lorsque je le positionne sur Cel.

Le truc c'est qu'il est nécessaire que je fasse une incrémentation dans la boucle If car sinon ma macro tourne à l'infini. En effet, je rajoute une ligne au début du second if, du coup je retraite la 3ème ligne indéfiniment..

Merci pour ta réponse m3ellem !

SkillzZ

Salut m3ellem1, SkillzZ

Si "Plage2" est une simple colonne ou un simple linge tu peux utiliser Range.Offset

ou essai ca :

stps = 1
For Each Cel In Plage2
   stps = stps + 1
    If stps = 2 Then
            i = Cel.Row
            If .Cells(i, 2).Value = Parent And .Cells(i, 4).Value = valeurcc And .Range("B" & i).Font.Bold = True Then
                C2_Desc = .Cells(i + 1, 5).Value
            If ICP = "Entities" Then
            .Range("A" & i).EntireRow.Insert
                        .Range("A" & i & ":" & "Z" & i).Font.Bold = False
                        .Cells(i, 2).Value = Account_Code
                        .Cells(i, 3).Value = Account_Desc
                        .Cells(i, 4).Value = valeurcc
                        .Cells(i, 5).Value = C2_Desc
                        .Cells(i, 6).Value = "[ICP None]"
                        .Cells(i, 8).Value = "B"
                        .Cells(i, 9).Value = "N"
                        .Range("J" & i).Interior.Color = RGB(255, 255, 196)
                        .Cells(i, 10).NumberFormat = "#,##0;(#,##0);-"
                        .Cells(i, 10).Value = "0"
                        .Range("M6").AutoFill Destination:=.Range("M6:M" & i)
                        .Range("O6").AutoFill Destination:=.Range("O6:O" & i)
                        stps = 0
              Else
                        stps = 1
              End If
              End If

       End If

Next Cel

Bonjour AMIR,

Ta solution est géniale. Elle me convient parfaitement et me fait gagner un temps fou dans mon code plus gros.. Merci beaucoup, c'est top !

SkillzZ

Salut

dit moi :

tu a essai ca :

Si "Plage2" est une simple colonne ou un simple linge tu peux utiliser Range.Offset

Bonjour AMIR,

Non je n'ai pas essayé car la seconde formule fonctionne bien avec une petite adaptation. Je ne sais pas comment utiliser le Range.Offset d'ailleurs, mais je n'ai pas chercher non plus.

SkillzZ

Rechercher des sujets similaires à "vba sauter step boucle"