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