Déclarer une variable pour une boucle for

Bonjour à tous,

Le titre n'étant absolument pas explicite, j'ai en fait une question assez simple.

Peut on déclarer une variable type i pour une boucle for en tant que nombre ?

De ce type :

[i]Dim i as Integer

i = 4[/i]

Puis utiliser cette variable dans une boucle de cette manière par exemple :

For l = 4 To 200 Step 14

'si la case est occupée emplacement saute 14 lignes
If Cells(l, 2) <> "" Then
l = l + 14
End If

Next l

Ce type de boucle peut-il fonctionner ? Parce que mon programme ne fonctionne pas ainsi, cependant il ne m'affiche aucun message d'erreur.

En attendant vos réponses qui je l'espère m'éclaireront,

Cordialement,

H.

Ta boucle est incohérente...

Voilà que fait la boucle:

l = 4

Si la cellule 4,2 est vide

l = 18

l=32

si ...

Que veux tu ?

Bonjour,

Peut on déclarer une variable type i pour une boucle for en tant que nombre ?

De ce type :

i = 4

oui tu peux !

Ce type de boucle peut-elle fonctionner ?

For l = 4 To 200 Step 14

'si la case est occupée emplacement saute 14 lignes

If Cells(l, 2) <> "" Then

l = l + 14

End If

Next l

oui ça fonctionne. par contre je vois pas l'interêt de ton l=l+14 puisque tu as déjà "Step 14"

explique clairement ce que tu veux faire.

A+

Salut et merci pour vos réponses fulgurantes,

En fait le but de cette boucle est d'ajouter à l 16 à chaque fois que la cellule de départ puis toutes les cellules situées à 4 + 16 lignes en colonne B est pleine. De cette manière je vais pouvoir utiliser cette cellule (l,2) comme case de départ pour chacun de mes traitements dans mon programme en évitant de copier des données en écrasant d'autres déjà copiées plus tôt dans le traitement. Si jamais ce n'est pas clair, je mettrai des demain matin mon programme en entier pour que ce soit plus clair.

Cordialement,

H.

Bonjour,

Comme promis, voici le code dans son intégralité. Il a pour but de faire une synthèse de toutes les "affaires en cours". Une affaire en cours ayant deux conditions : avoir un numéro d'OF (toujours situé en B5 au départ puis i = 5 step 14) et contenir au moins une case vide dans la plage B12 à F16.

Le programme se lance avec un bouton simple. Le traitement est donc censé afficher dans un deuxième fichier_synthese toutes les affaires en cours à partir des données situées dans le fichier source (fichier_BE).

Pour pouvoir "scanner" toutes les données j'ai créé une plusieurs boucles for. Jusque là tout fonctionnait parfaitement jusqu'à ma question initiale. Je souhaite en réalité coller toutes les affaires à la suite et pas les unes sur les autres (il y a potentiellement plusieurs affaires en cours) d'où ma boucle l (avec l= 4 + 14 si case non vide).

Voyez plutôt (l'ensemble des traitements n'étant pas encore codé, je m'intéressais en premier lieu à mes conditions) :

Sub Bouton345_Cliquer()

'Cacher la recherche et les bascules entre fichiers durant le traitement
Application.ScreenUpdating = False

'déclarer les variables
Dim fichier_synthese As String
Dim fichier_origine_BE As String
Dim fichier_origine_QU As String

'pour naviguer entre les fichiers OUVERTS sous windows
fichier_synthese = "Suivi_Modules_G_Synthese_V2.xlsm"
fichier_origine_BE = "Suivi_Modules_G_BE.xlsx"
fichier_origine_QU = "Suivi_Modules_G_Qualite.xlsx"

'________________________________________________________________________
'________________________________________________________________________

'activer le fichier BE
Windows(fichier_origine_BE).Activate

    'pour i allant de 5 à 200 avec un pas de 14 sur fichier BE
    For i = 5 To 50 Step 14

        'tant que case OF pas vide
        'While Not (IsEmpty(Cells(i, 2)))
        If Cells(i, 2).Value <> "" Then

            'Ligne
            For j = i + 7 To i + 11
            Windows(fichier_origine_BE).Activate

                'colonne
                For k = 2 To 6
                Windows(fichier_origine_BE).Activate

                    'teste toutes les cases une par une de B12 à F16
                    '
                    If Not (IsEmpty(Cells(j, k))) Then

                    'si on trouve une cellule vide alors affaire non soldée : lancer le traitement
                    Else
                        'copie n° d'OF
                        Cells(i, 2).Copy
                        Windows(fichier_synthese).Activate

                            '---------------------------------------
                            'déclarer variable emplacement corresp. à la ligne de la case OF en tant que nombre
                            Dim l As Integer

                            'aller voir les n° d'OF pour voir si les cases sont occupées
                            For l = 4 To 200 Step 14

                                'si la case est occupée emplacement saute 14 lignes (devient 18 après une boucle)
                                If Cells(l, 2) <> "" Then
                                l = l + 14
                                End If

                            Next l

                            '---------------------------------------

                        'Coller le n° d'OF
                        Sheets("Suivi_Modules").Cells(l, 2).PasteSpecial xlPasteAll

                    End If

                Next k

            Next j

        End If

    Next i

'________________________________________________________________________
'________________________________________________________________________

End Sub

Dans l'état actuel le programme ne copie rien du tout mais ne m'affiche aucun message d'erreur. Je joins également les deux fichiers si besoin.

En vous remerciant par avance pour votre aide,

Cordialement,

H.

Rechercher des sujets similaires à "declarer variable boucle"