Effectuer une boucle via VBA
weziaw
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
weziaw Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
weziaw Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je souhaite effectuer une boucle lors de l'exécution d'une macro : voici mon projet de départ :
Sub Macro10()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne la ligne 2 de la feuille de calcul et la colle en special les valeurs sur la ligne 2 de la fauille 10
Sheets("calcul").Select
Range("a1").Select
Rows("2:2").Select
Selection.Copy
Sheets("Feuil10").Select
Rows("2:2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''
Range("R2").Select
Selection.Copy
'defini i2 comme une variable
Dim i2 As String
Sheets("Feuil10").Activate
'la valeur en D2 est inscrit dans la variable i2
i2 = Range("D2")
Sheets("Feuil1").Activate
'
Cells.Find(What:=i2, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sheets("Feuil10").Select
Range("V2").Select
Selection.Copy
'defini j2 comme une variable
Dim j2 As String
Sheets("Feuil10").Activate
'la valeur en H2 est inscrit dans la variable j2
j2 = Range("H2")
Sheets("Feuil1").Activate
'
Cells.Find(What:=j2, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne Z2
Sheets("Feuil10").Select
Range("Z2").Select
Selection.Copy
'defini k2 comme une variable
Dim k2 As String
Sheets("Feuil10").Activate
'la valeur en L2 est inscrit dans la variable k2
k2 = Range("L2")
Sheets("Feuil1").Activate
'
Cells.Find(What:=k2, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
''''''''''''''''''''''''''''''''''''''''''''
End Sub
en gros, ce bout de programme va chercher une ligne dans une feuille de calcul pour coller uniquement ces valeurs sur une feuille vierge. ensuite d'après certains résultats, il va mettre à jour les données résultant du calcul.
Je voudrais faire cette manip avec les 100 lignes suivantes, au vu de mon faible niveau VBA je pourrais effectivement recopier 100 fois ces lignes en modifiant les cellules ou les lignes concernée, ca ressemblerait pour la deuxième ligne à :
Sub Macro10()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne la ligne 3 de la feuille de calcul et la colle en special les valeurs sur la ligne 3 de la fauille 10
Sheets("calcul").Select
Range("a1").Select
Rows("3:3").Select
Selection.Copy
Sheets("Feuil10").Select
Rows("3:3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
''''''''''''''''''''''''''''''''''''''''
Range("R3").Select
Selection.Copy
'defini i3 comme une variable
Dim i3 As String
Sheets("Feuil10").Activate
'la valeur en D3 est inscrit dans la variable i3
i3 = Range("D3")
Sheets("Feuil1").Activate
'
Cells.Find(What:=i3, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sheets("Feuil10").Select
Range("V3").Select
Selection.Copy
'defini j3 comme une variable
Dim j3 As String
Sheets("Feuil10").Activate
'la valeur en H2 est inscrit dans la variable j2
j3 = Range("H3")
Sheets("Feuil1").Activate
'
Cells.Find(What:=j3, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne Z3
Sheets("Feuil10").Select
Range("Z3").Select
Selection.Copy
'defini k3 comme une variable
Dim k3 As String
Sheets("Feuil10").Activate
'la valeur en L3 est inscrit dans la variable k3
k3 = Range("L3")
Sheets("Feuil1").Activate
'
Cells.Find(What:=k3, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
''''''''''''''''''''''''''''''''''''''''''''
End Sub
Vous comprenez mon besoin d'affecter des variables pour incrémenter les lignes, mais j'avoue que pour le réaliser j'ai besoin d'aide, ça fait trop longtemps que je cherche en vain.
pour le : Rows("3:3").Select je saurais affecter des variables qui s'incrémentent dans la boucle mon problème est de faire devenir : Range("R2").Select en Range("R3").Select... au cours de la boucle
Merci d'avance pour vos réponses
Je souhaite effectuer une boucle lors de l'exécution d'une macro : voici mon projet de départ :
Sub Macro10()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne la ligne 2 de la feuille de calcul et la colle en special les valeurs sur la ligne 2 de la fauille 10
Sheets("calcul").Select
Range("a1").Select
Rows("2:2").Select
Selection.Copy
Sheets("Feuil10").Select
Rows("2:2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''
Range("R2").Select
Selection.Copy
'defini i2 comme une variable
Dim i2 As String
Sheets("Feuil10").Activate
'la valeur en D2 est inscrit dans la variable i2
i2 = Range("D2")
Sheets("Feuil1").Activate
'
Cells.Find(What:=i2, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sheets("Feuil10").Select
Range("V2").Select
Selection.Copy
'defini j2 comme une variable
Dim j2 As String
Sheets("Feuil10").Activate
'la valeur en H2 est inscrit dans la variable j2
j2 = Range("H2")
Sheets("Feuil1").Activate
'
Cells.Find(What:=j2, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne Z2
Sheets("Feuil10").Select
Range("Z2").Select
Selection.Copy
'defini k2 comme une variable
Dim k2 As String
Sheets("Feuil10").Activate
'la valeur en L2 est inscrit dans la variable k2
k2 = Range("L2")
Sheets("Feuil1").Activate
'
Cells.Find(What:=k2, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
''''''''''''''''''''''''''''''''''''''''''''
End Sub
en gros, ce bout de programme va chercher une ligne dans une feuille de calcul pour coller uniquement ces valeurs sur une feuille vierge. ensuite d'après certains résultats, il va mettre à jour les données résultant du calcul.
Je voudrais faire cette manip avec les 100 lignes suivantes, au vu de mon faible niveau VBA je pourrais effectivement recopier 100 fois ces lignes en modifiant les cellules ou les lignes concernée, ca ressemblerait pour la deuxième ligne à :
Sub Macro10()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne la ligne 3 de la feuille de calcul et la colle en special les valeurs sur la ligne 3 de la fauille 10
Sheets("calcul").Select
Range("a1").Select
Rows("3:3").Select
Selection.Copy
Sheets("Feuil10").Select
Rows("3:3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
''''''''''''''''''''''''''''''''''''''''
Range("R3").Select
Selection.Copy
'defini i3 comme une variable
Dim i3 As String
Sheets("Feuil10").Activate
'la valeur en D3 est inscrit dans la variable i3
i3 = Range("D3")
Sheets("Feuil1").Activate
'
Cells.Find(What:=i3, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sheets("Feuil10").Select
Range("V3").Select
Selection.Copy
'defini j3 comme une variable
Dim j3 As String
Sheets("Feuil10").Activate
'la valeur en H2 est inscrit dans la variable j2
j3 = Range("H3")
Sheets("Feuil1").Activate
'
Cells.Find(What:=j3, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne Z3
Sheets("Feuil10").Select
Range("Z3").Select
Selection.Copy
'defini k3 comme une variable
Dim k3 As String
Sheets("Feuil10").Activate
'la valeur en L3 est inscrit dans la variable k3
k3 = Range("L3")
Sheets("Feuil1").Activate
'
Cells.Find(What:=k3, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
''''''''''''''''''''''''''''''''''''''''''''
End Sub
Vous comprenez mon besoin d'affecter des variables pour incrémenter les lignes, mais j'avoue que pour le réaliser j'ai besoin d'aide, ça fait trop longtemps que je cherche en vain.
pour le : Rows("3:3").Select je saurais affecter des variables qui s'incrémentent dans la boucle mon problème est de faire devenir : Range("R2").Select en Range("R3").Select... au cours de la boucle
Merci d'avance pour vos réponses
A voir également:
- Effectuer une boucle via VBA
- Vous devez disposer d'une autorisation pour effectuer cette action - Guide
- Via michelin carte - Télécharger - Transports & Cartes
- Excel compter cellule couleur sans vba - Guide
- Partager des photos via un lien - Guide
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
2 réponses
Bonjour,
Essaie comme cela
A+
Essaie comme cela
Sub Macro10()
Dim C As Range
Dim i As Integer
With Sheets("Feuil10")
For i = 2 To 102
.Rows(i).Value = Sheets("calcul").Rows(i).Value
Set C = Sheets("Feuil1").Cells.Find(What:=.Range("D" & i), LookIn:=xlValues, LookAt:=xlWhole)
If Not C Is Nothing Then .Range("R" & i).Value = C.Offset(0, 1).Value
Set C = Sheets("Feuil1").Cells.Find(What:=.Range("H" & i), LookIn:=xlValues, LookAt:=xlWhole)
If Not C Is Nothing Then .Range("V" & i).Value = C.Offset(0, 1).Value
Set C = Sheets("Feuil1").Cells.Find(What:=.Range("L" & i), LookIn:=xlValues, LookAt:=xlWhole)
If Not C Is Nothing Then .Range("Z" & i).Value = C.Offset(0, 1).Value
Next i
End With
End Sub
A+
Salut,
Je me suis peut être pris un peu la tête en faisant comme ça :
Sub Macro10()
Dim a, b As Integer
a = 1
b = 1
While a <= 101
'a servira de la variable pour la selection de ligne
a = a + 1
'b servira de la variable pour copier les restant
b = b + 1
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'1 ère ligne
'selectionne la ligne 2 de la feuille de calcul et la colle en special les valeurs sur la ligne 2 de la fauille 10
Sheets("calcul").Select
Range("a1").Select
Range("A" & a & ":XFD" & a).Select
Selection.Copy
Sheets("Feuil10").Select
Range("A" & a & ":XFD" & a).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
''''''''''''''''''''''''''''''''''''''''
'selectionne le restant
Range("R" & b).Select
Selection.Copy
'defini i comme une variable
Dim i As String
Sheets("Feuil10").Activate
'la valeur en D est inscrit dans la variable i
i = Range("D" & b)
Sheets("feuil1").Activate
'
Cells.Find(What:=i, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur restant
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne V restant
Sheets("Feuil10").Select
Range("V" & b).Select
Selection.Copy
'defini j comme une variable
Dim j As String
Sheets("Feuil10").Activate
'la valeur en H est inscrit dans la variable j
j = Range("H" & b)
Sheets("feuil1").Activate
'
Cells.Find(What:=j, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur restant
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne Z restant
Sheets("Feuil10").Select
Range("Z" & b).Select
Selection.Copy
'defini k comme une variable
Dim k As String
Sheets("Feuil10").Activate
'la valeur en L est inscrit dans la variable k
k = Range("L" & b)
Sheets("Feuil1").Activate
'
Cells.Find(What:=k, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur de restant
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
''''''''''''''''''''''''''''''''''''''''''''
Wend
End Sub
Ça fait peut être pas très programmeur mais ça me donne satisfaction :-)
Cdlt
Je me suis peut être pris un peu la tête en faisant comme ça :
Sub Macro10()
Dim a, b As Integer
a = 1
b = 1
While a <= 101
'a servira de la variable pour la selection de ligne
a = a + 1
'b servira de la variable pour copier les restant
b = b + 1
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'1 ère ligne
'selectionne la ligne 2 de la feuille de calcul et la colle en special les valeurs sur la ligne 2 de la fauille 10
Sheets("calcul").Select
Range("a1").Select
Range("A" & a & ":XFD" & a).Select
Selection.Copy
Sheets("Feuil10").Select
Range("A" & a & ":XFD" & a).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
''''''''''''''''''''''''''''''''''''''''
'selectionne le restant
Range("R" & b).Select
Selection.Copy
'defini i comme une variable
Dim i As String
Sheets("Feuil10").Activate
'la valeur en D est inscrit dans la variable i
i = Range("D" & b)
Sheets("feuil1").Activate
'
Cells.Find(What:=i, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur restant
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne V restant
Sheets("Feuil10").Select
Range("V" & b).Select
Selection.Copy
'defini j comme une variable
Dim j As String
Sheets("Feuil10").Activate
'la valeur en H est inscrit dans la variable j
j = Range("H" & b)
Sheets("feuil1").Activate
'
Cells.Find(What:=j, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur restant
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'selectionne Z restant
Sheets("Feuil10").Select
Range("Z" & b).Select
Selection.Copy
'defini k comme une variable
Dim k As String
Sheets("Feuil10").Activate
'la valeur en L est inscrit dans la variable k
k = Range("L" & b)
Sheets("Feuil1").Activate
'
Cells.Find(What:=k, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
'colle la valeur de restant
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
''''''''''''''''''''''''''''''''''''''''''''
Wend
End Sub
Ça fait peut être pas très programmeur mais ça me donne satisfaction :-)
Cdlt