Effectuer une boucle via VBA

Fermé
weziaw Messages postés 2 Date d'inscription lundi 10 novembre 2014 Statut Membre Dernière intervention 10 novembre 2014 - Modifié par weziaw le 10/11/2014 à 15:18
weziaw Messages postés 2 Date d'inscription lundi 10 novembre 2014 Statut Membre Dernière intervention 10 novembre 2014 - 10 nov. 2014 à 16:07
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

2 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
10 nov. 2014 à 15:58
Bonjour,

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+
0
weziaw Messages postés 2 Date d'inscription lundi 10 novembre 2014 Statut Membre Dernière intervention 10 novembre 2014
10 nov. 2014 à 16:07
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
0