1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| Sub Import()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TD As ListObject 'déclare la variable TD (Tableau Destination)
Dim PD As Range 'déclare la variable PD (Plage Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim PS As Range 'déclare la variable PS (Plage Source)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim A As Integer 'déclare la variable A (Année)
Dim N As Integer 'déclare la variable N (Numéro)
'si "Non" au mnessage, sort de la procédure
If MsgBox("Voulez vous mettre à jour le nombre de jours étoile de l'industriel?", vbYesNo + vbQuestion, "Confirmation") = vbNo Then Exit Sub
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Modèle") 'définit l'onglet destination OD
Set TD = OD.ListObjects(1) 'définit le tableau destination TD
Set PD = TD.DataBodyRange 'définit la plage destination PD
Set CS = Workbooks("TABSOURCE.xlsm") 'définit le classeur source
For I = 1 To PD.Rows.Count 'boucle 1 : sur toutes les lignes I de la plage destination PD
Set OS = CS.Worksheets(PD(I, 2).Value) 'définit l'onglet source OS
Set PS = OS.Range("A3").CurrentRegion 'définit la plage source PS
For J = 2 To PS.Rows.Count 'boucle 2 : sur toutes les lignes J de la plage source PS
If PS(J, 5) = PD(I, 3) Then 'condition : si la donnée ligne J colonne 5 de la plage PS est égale à la donnée ligne I colonne 3 de la plage PD
A = Year(DateSerial(CInt(Split(PS(J, 6), "-")(0)), 1, 1)) 'définit l'année A
N = CInt(Split(PS(J, 6), "-")(1)) 'définit le numéro N
'si la donnée ligne I colonne 5 de la plage PD (convertie en entier) est égale à A et si la donnée ligne I colonne 4 de la plage PD (convertie en entier) est égale à N
'renvoie la donnée ligne J colonne 39 de la plage PS dans la cellule ligne I colonne 38 de la plage PD, sort de la boucle 2
If CInt(PD(I, 5)) = A And CInt(PD(I, 4)) = N Then PD(I, 38).Value = PS(J, 39).Value: Exit For
End If 'fin de la condition
Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub |
Partager