Code VBA pour extraite et traiter des données de différents fichier Excel

2conso.xlsm (32.29 Ko)
1piece-f.xlsx (40.78 Ko)

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
Rechercher des sujets similaires à "code vba extraite traiter donnees differents fichier"