Code VBA pour extraite et traiter des données de différents fichier Excel
Bonjour,
Débutant en VBA, j'essaye depuis quelques jours mais sans succès de créer un code me permettant d'aller récupérer des données dans divers fichiers Excel (Pièce F, Pièce D, R...) à des emplacements spécifiques (pour l'instant sur mon ordinateur mais plus tard sur un espace de partage) pour les intégrer dans un fichier de consolidation "conso".
Je vais essayer d'être le plus clair possible :
- Des personnes remplissent les fichiers Pièce F, Pièce D, R...
Notamment les informations suivantes : ligne, livraison, score relation, score contrat, pour plusieurs clients (S1, S2,...).
Sachant que pour un même client il peut y avoir plusieurs lignes (dont il faudra donc faire un moyenne pondérée).
-J'aimerais que ma macro aille chercher les informations, pour chaque client, dans les fichiers pour les implémenter dans les colonnes correspondantes dans le fichier conso tout en faisant les moyennes quant nécessaire.
Pour les moyennes il faudrait faire (nb de ligne * scores) / nb de ligne
Le premier problème que je rencontre avec mon code c'est que je n'arrive pas à "activer" mes fichiers excel dans leur emplacement correspondant pour pouvoir aller chercher mes données sans avoir à ouvrir chaque fichier.
De plus même si le reste de mon code fonctionne, il est très long et je me demandais si peut-être il n'y avait pas plus simple.
Je vous joint un exemple de fichier conso et Pièce F pour mieux vous aider à comprendre.
Je vous remercie par avance pour votre aide et espère avoir été assez clair.
Voila le code que j'ai écrit pour le moment :
Sub MAJtest()
Workbooks("C:\Users\canac\Documents\Conso.xlsm").Activate
tabloCONSO = Sheets("Intermediate calculation").Range("C5").CurrentRegion
Workbooks("C:\Users\canac\Documents\Piece F.xlsx").Activate
tabloPieceF = Sheets("donnée pièce F").Range("B10").CurrentRegion
Workbooks("C:\Users\canac\Documents\Piece D.xlsx").Activate
tabloPieceD = Sheets("donnée pièce D").Range("C9").CurrentRegion
For iCONSO = 5 To UBound(tabloCONSO, 1)
grade = 0
gradeH = 0
gradeB = 0
Ttablo = 0
gradeD = 0
gradeHD = 0
gradeBD = 0
TtabloD = 0
Line = 0
deliv = 0
LineD = 0
delivD = 0
contractH = 0
contractB = 0
contractDH = 0
contractDB = 0
contract = 0
contractD = 0
For iSP1 = 10 To UBound(tabloPieceF, 1)
For iSP2 = 10 To UBound(tabloPieceF, 1)
If tabloCONSO(iCONSO, 3) = tabloPieceF(iSP2, 2) Then
Ttablo = Ttablo + 1
End If
Next iSP2
If tabloCONSO(iCONSO, 3) = tabloPieceF(iSP1, 2) Then
gradeH = gradeH + (tabloPieceF(iSP1, 7) * tabloPieceF(iSP1, 10))
gradeB = gradeB + tabloPieceF(iSP1, 7)
deliv = deliv + tabloPieceF(iSP1, 6)
Line = Line + tabloPieceF(iSP1, 7)
contractH = contractH + (tabloPieceF(iSP1, 7) * tabloPieceF(iSP1, 13))
contractB = contractB + tabloPieceF(iSP1, 7)
End If
Next iSP1
If gradeB = 0 Then
Workbooks("C:\Users\canac\Documents\Conso.xlsm").Activate
Cells(iCONSO, 11) = ""
Else
Workbooks("C:\Users\canac\Documents\Conso.xlsm").Activate
grade = gradeH / gradeB
Cells(iCONSO, 11) = grade
End If
If contractB = 0 Then
Workbooks("C:\Users\canac\Documents\Conso.xlsm").Activate
Cells(iCONSO, 21) = ""
Else
Workbooks("C:\Users\canac\Documents\Conso.xlsm").Activate
contract = contractH / contractB
Cells(iCONSO, 21) = contract
End If
Cells(iCONSO, 4) = deliv
Cells(iCONSO, 5) = Line
For iSPD1 = 9 To UBound(tabloPieceD, 1)
For iSPD2 = 9 To UBound(tabloPieceD, 1)
If tabloCONSO(iCONSO, 3) = tabloPieceD(iSPD2, 2) Then
TtabloD = TtabloD + 1
End If
Next iSPD2
If tabloCONSO(iCONSO, 3) = tabloPieceD(iSPD1, 2) Then
gradeHD = gradeHD + (tabloPieceD(iSPD1, 7) * tabloPieceD(iSPD1, 10))
gradeBD = gradeBD + tabloPieceD(iSPD1, 7)
delivD = delivD + tabloPieceD(iSPD1, 6)
LineD = LineD + tabloPieceD(iSPD1, 7)
contractDH = contractDH + (tabloPieceD(iSPD1, 7) * tabloPieceD(iSPD1, 13))
contractDB = contractDB + tabloPieceD(iSPD1, 7)
End If
Next iSPD1
If gradeBD = 0 Then
Workbooks("C:\Users\canac\Documents\Conso.xlsm").Activate
Cells(iCONSO, 12) = ""
Else
Workbooks("C:\Users\canac\Documents\Conso.xlsm").Activate
gradeD = gradeHD / gradeBD
Cells(iCONSO, 12) = gradeD
End If
If contractDB = 0 Then
Workbooks("C:\Users\canac\Documents\Conso.xlsm").Activate
Cells(iCONSO, 22) = ""
Else
Workbooks("C:\Users\canac\Documents\Conso.xlsm").Activate
contractD = contractDH / contractDB
Cells(iCONSO, 22) = contractD
End If
Cells(iCONSO, 6) = delivD
Cells(iCONSO, 7) = LineD
Next iCONSO
End Sub