Macros excel-VBA boucle ?
Bonjour,
je viens vers vous car je dois créer une macro Excel via je pense une boucle mais je ne sais pas comment la faire. j'ai donc deux fichiers. sur le 1er fichier j'ai 12 onglets qui correspondent à 12 régions. sur le second fichier j'ai 4 onglets. les données qui sont sur le fichier 2 doivent être reportés sur le fichier 1 à l'aide d'une boucle (macros). je vous poste les deux fichiers et je vous remercie par avance de votre aide. Concernant le 1er tableau les régions ne sont pas découpées toutes de la m^me taille mais ont une variables identiques (moins de 50 salariés) et pour le second tableau cela correspond à un découpage en 4 grands secteurs (identiques pour toutes les régions)...
cordialement
Bonjour,
à tester,
Sub test()
Dim wk1 As Workbook, wk2 As Workbook, baseSh, sht
Dim nb As Integer, i As Integer, y As Integer, col As Integer
Dim add1 As String, t As String, nn As String
Dim n As Long
Set wk1 = ThisWorkbook
Set wk2 = Workbooks("mel945-Fichiers2.xlsm")
baseSh = Array("persp cad X taille", "persp sal X taille", "perps cad X grd secteur", "persp sal X grd secteur")
For Each sht In Worksheets
If sht.Name <> "feuil1" Then
nb = Application.CountA(Sheets(sht.Name).Range("A6:A16")) - 1
nn = """" & sht.Name & """"
col = 2
For i = 0 To 1
add1 = "'[" & wk2.Name & "]" & baseSh(i) & "'!"
t = "MATCH(" & nn & "," & CStr(add1) & "$A:$A,0)"
n = Evaluate(t)
For y = 0 To nb
Sheets(sht.Name).Cells(y + 6, col).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 3).Value
Sheets(sht.Name).Cells(y + 6, col + 1).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 4).Value
Next y
col = 6
Next i
col = 2
For i = 2 To 3
add1 = "'[" & wk2.Name & "]" & baseSh(i) & "'!"
t = "MATCH(" & nn & "," & CStr(add1) & "$A:$A,0)"
n = Evaluate(t)
For y = 0 To 3
Sheets(sht.Name).Cells(y + 20, col).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 3).Value
Sheets(sht.Name).Cells(y + 20, col + 1).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 4).Value
Next y
col = 6
Next i
End If
Next
End Sub
waouhhhh je ne sais comment vous remercier cela marche parfaitement dans le fichier transmis.
cependant j'ai encore 1 ou 2 interrogations. j'ai développé une macro (je suis un vrai débutant) sur un fichier et les tableaux que je vous ai envoyé sont à une ligne différente de celle du fichier envoyé et quand je recopie la macro il y a un débogage sur la ligne
t = "MATCH(" & nn & "," & CStr(add1) & "$A:$A,0)"
n = Evaluate(t). (celle-ci est e jaune)
bien entendu mes fichiers possède d'autres noms que fichier 1 et 2.
pouvez vous m'éclairer svp ! même si toutes les instructions n'ont pas été toutes claires pour moi !
quoi qu'il arrive je vous remercie du temps que vous avez pris et vous êtes une vrai pro
merci encore
cordialement,
Bonjour mel945,
oui, j'ai renommé les onglets du fichier1 car les noms n'étaient pas identique au nom apparaissant dans les colonnes A du fichier2
j'ai utilisé les noms d'onglet pour faire la recherche,
nn = """" & sht.Name & """"si le nom n'apparait pas dans la colonne A du fichier2, cela produit un erreur sur la variable n
add1 = "'[" & wk2.Name & "]" & baseSh(i) & "'!"
t = "MATCH(" & nn & "," & CStr(add1) & "$A:$A,0)"
n = Evaluate(t)pouvez-vous me transmettre les vrai fichiers ?
OK je vous transmets les fichiers originaux...j'ai mis un titre en rouge là ou je n'arrivais pas à faire de macros et j'ai mis les onglets correspondants en rouge dans le second fichier...sinon concernant tout le reste j'ai réussi même si ma macro est d'un celui d'un débutant
merci encore
je vous renvoie les deux fichiers avec les variables qui ont le même nom !
merci
sur les 4 fichiers seuls les 2 derniers sont à récupérer avec le même nom de variable...
re-bonjour
je n'ai pas eu de réponse depuis que je vous ai envoyé les fichiers...je voulais juste savoir si en marquant les mêmes noms de régions dans les deux fichiers dans les colonnes ou lignes comment aurait t-il fallu écrire la macro.
si bien entendu vous avez du temps pour y répondre.
merci encore !
Bonjour,
vos fichiers du 2ème envoi étant très différent du prmier envoi, ça été plus long,
je n'ai pas tester sur tout les onglets car les noms sont encore différent entre les 2 classeurs
à tester,
Sub test()
Dim wk1 As Workbook, wk2 As Workbook, baseSh, sht
Dim nb As Integer, i As Integer, y As Integer, col As Integer
Dim add1 As String, t As String, nn As String, verif As String
Dim n As Long
Set wk1 = ThisWorkbook
Set wk2 = Workbooks("Le Panel 2017 par région_fichiers_régionaux.xlsm")
baseSh = Array("persp cad X taille", "persp sal X taille", "perps cad X grd secteur", "persp sal X grd secteur")
For Each sht In Worksheets
verif = sht.Name
If sht.Name <> "feuil1" Then
ligne1 = Application.Match("Par taille d'établissement", Sheets(sht.Name).Range("A:A"), 0) + 1
ligne2 = Application.Match("Par département", Sheets(sht.Name).Range("A:A"), 0) - 3
ligne3 = Application.Match("Par grands secteurs", Sheets(sht.Name).Range("A:A"), 0) + 1
ligne4 = Application.Match("Les informations clés de la région", Sheets(sht.Name).Range("A:A"), 0) - 1
plg1 = Range(Cells(ligne1, 1), Cells(ligne2, 1)).Address
nb = Application.CountA(Sheets(sht.Name).Range(plg1))
nn = """" & sht.Name & """"
col = 2
For i = 0 To 1
add1 = "'[" & wk2.Name & "]" & baseSh(i) & "'!"
t = "MATCH(" & nn & "," & CStr(add1) & "$A:$A,0)"
n = Evaluate(t)
For y = 0 To nb - 1
Sheets(sht.Name).Cells(ligne1 + y, col).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 3).Value
Sheets(sht.Name).Cells(ligne1 + y, col + 1).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 4).Value
Next y
col = 6
Next i
col = 2
For i = 2 To 3
add1 = "'[" & wk2.Name & "]" & baseSh(i) & "'!"
t = "MATCH(" & nn & "," & CStr(add1) & "$A:$A,0)"
n = Evaluate(t)
For y = 0 To 3
Sheets(sht.Name).Cells(ligne3 + y, col).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 3).Value
Sheets(sht.Name).Cells(ligne1 + y, col + 1).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 4).Value
Next y
col = 6
Next i
End If
Next
End SubBonjour mademoiselle sabV
je voulais vous remercier du temps que vous avez pris à me répondre au sujet de mes différentes questions.
je ne sais pas comment vous remercier en vous payant à manger à boire n'importe quoi je vous en suis très reconnaissant.
merci encore
le premier code marche parfaitement en adaptant bien c'est a dire en mettant le bon nom des régions; cependant il reste une dernière interro. c'est que chaque année avec les insertions pour la mise à jour des autre tableaux il va falloir changer le cells(y+6,col)..
+6 car on se trouve en 6ième ligne mais ds le dernier envoi j'en étais à cells (y+132,col).
y a t il une facon de définir via peut être un compteur li indiquer je veux que tu te positionnes là comme cela je n'ai plus à toucher à la macro.
Sheets(sht.Name).Cells(y + 6, col).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 3).Value
Sheets(sht.Name).Cells(y + 6, col + 1).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 4).Value
merci
Bonjour,
cela a déjà été modifier dans mon dernier envoie, voir:
ligne1 = Application.Match("Par taille d'établissement", Sheets(sht.Name).Range("A:A"), 0) + 1
ligne2 = Application.Match("Par département", Sheets(sht.Name).Range("A:A"), 0) - 3
ligne3 = Application.Match("Par grands secteurs", Sheets(sht.Name).Range("A:A"), 0) + 1
ligne4 = Application.Match("Les informations clés de la région", Sheets(sht.Name).Range("A:A"), 0) - 1bonjour je n'ai pas compris le +1 ou -3 a chaque fin de programme
ligne1 = Application.Match("Par taille d'établissement", Sheets(sht.Name).Range("A:A"), 0) + 1
ligne2 = Application.Match("Par département", Sheets(sht.Name).Range("A:A"), 0) - 3
ligne3 = Application.Match("Par grands secteurs", Sheets(sht.Name).Range("A:A"), 0) + 1
la ligne 4 j'en ai plus besoin tout se remplit bien sauf par département où la macro se positionne en ligne 139 je ne sais pas pourquoi !
sinon le reste impec ..
je vous fais suivre le programme complété avec la prise en charge des départements sauf que cela ne commence pas à la bonne ligne !
merci encore...