Boucle For Next

Bonjour

Étant débutant dans le domaine de la programmation VBA , j'ai une question qui semble assez simple mais sur laquelle je n'ai pas réussie à trouver réponse .

je souhaite transférer des valeurs d'un onglet à un autre avec deux variables et en utilisant deux boucles For Next.

Sauf que la macro va incrémenter tout les valeurs de i (voir en dessous) et ensuite toutes les valeur de y. alors que je souhaiterais que les valeurs de i et y s’incrémente en même temps à chaque boucle .

J’espère avoir été aussi clair que je puisse l'être .

Merci pour votre aide

Sub Dudul_macro()

Dim i As Long

Dim y As Long

For i = 6 To 10

For y = 4 To 8

If Sheets("Dépouillement").Cells(i, 2).Value Like "non" Then

Else

Sheets("Dépouillement").Activate

''""""""" Opérateur""""""""

Sheets("TabRapport").Cells(y, 3) = Sheets("Dépouillement").Cells(i, 7)

'''"""""""Date """"""""

Sheets("TabRapport").Cells(y, 2) = Sheets("Dépouillement").Cells(i, 3)

''''''''''''''' heure """"""""""""

Sheets("TabRapport").Cells(y, 4) = Sheets("Dépouillement").Cells(i, 12)

Sheets("TabRapport").Cells(y, 6) = Sheets("Dépouillement").Cells(i, 14)

''''''''''''''' echantillon'''''''''''

Sheets("TabRapport").Cells(y, 1) = Sheets("Dépouillement").Cells(i, 5)

Sheets("TabRapport").Cells(y, 2) = Sheets("Dépouillement").Cells(i, 10)

'''''''''''''''' concentration'''''''''''

Sheets("TabRapport").Cells(y, 3) = Sheets("Dépouillement").Cells(i, 25)

Sheets("TabRapport").Cells(y, 4) = Sheets("Dépouillement").Cells(i, 28)

''''''''''''''' VLE'''''''''''

Sheets("TabRapport").Cells(y, 5) = Sheets("Dépouillement").Cells(i, 45)

Sheets("Dépouillement").Cells(x, 47).Select

Selection.Copy

Sheets("TabRapport").Select

Cells(y, 6).Select

Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _

, SkipBlanks:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

End If

Next

Next

Sheets("Tabrapport").Select

MsgBox " macro terminé"

End Sub

Bonjour Arno et

vous pouvez essaier de n'utiliser que i avec une seule Boucle For

donc à la place de:

Sheets("TabRapport").Cells(y, 3) = Sheets("Dépouillement").Cells(i, 7)

on utilise:

Sheets("TabRapport").Cells(i-2, 3) = Sheets("Dépouillement").Cells(i, 7)

il faut aussi corriger cette ligne:

Sheets("Dépouillement").Cells(x, 47).Select

le x n'est pas defini!

bonne journée

Avant tout merci pour votre réponse

Mais à terme i sera =6 to 200

c'est moi qui vais déclencher la valeur de i par

If Sheets("Dépouillement").Cells(i, 2).Value Like "non" Then

Pour simplifier si la cellule (i,2) = Oui alors il va transférer les données dans l'autre onglet.

Sauf que la celule(i,2) peut être égal à 150 et du coup avec une variable je n'y arriverai pas

Ps : pardon pour le x , j'ai tellement changé de nom de variable que j'ai perdu le fil

Je vous remercie mais j'ai trouvé une solution detourné pour mon deuxième tableau en incrémentant sur la première cellule vide pour chaque boucle.

Bonjour,

Le point de départ de ta plage de destination peut être différent, mais quand tu passes une ligne (i + 1) dans ta feuille source, tu passes bien une ligne (y + 1) dans la feuille de destination ?

Une seule boucle devrait donc suffire, il faut juste avant d'entrer dans la boucle, de définir la valeur initiale de y.

Voilà un essai :

Sub Dudul_macro()

Dim i As Long, y As Long 'Déclaration des variables
Dim Dest As Worksheet

Set Dest = Worksheets("TabRapport")
With Sheets("Dépouillement")
    y = Dest.Cells(Rows.Count, 1).End(xlUp).Row 'Identifie la dernière ligne non vide en colonne A
    For i = 6 To 10
        y = y + 1
        If Not .Cells(i, 2).Value Like "non" Then
            Dest.Cells(y, 3) = .Cells(i, 7)
            Dest.Cells(y, 2) = .Cells(i, 3) 'Date
            Dest.Cells(y, 4) = .Cells(i, 12) 'Heure
            Dest.Cells(y, 6) = .Cells(i, 14) 'Heure
            Dest.Cells(y, 1) = .Cells(i, 5) 'Echantillon
            Dest.Cells(y, 2) = .Cells(i, 10) 'Echantillon
            Dest.Cells(y, 3) = .Cells(i, 25) 'Concentration
            Dest.Cells(y, 4) = .Cells(i, 28) 'Concentration
            Dest.Cells(y, 5) = .Cells(i, 45) 'VLE
            .Cells(x, 47).Copy
            Dest.Cells(y, 6).PasteSpecial Paste:=xlPasteAllUsingSourceTheme
            Application.CutCopyMode = False
        End If
    Next i
End With
MsgBox " macro terminé"

End Sub

PS : .Select et .Activate sont inutiles voire contre-productifs

super merci.

Cela fonctionne à merveille

Rechercher des sujets similaires à "boucle next"