Report d'information

bonjour

Dans un classeur excel

Feuille 1

colonne A = nom d'entreprise

Colonne B = montant TTC

Feuille 2

Idem

Feuile 3

Colonne A = nom d'entreprise

Colonne B => J'aimerais avoir le total des montant par entreprise (Car dans feuille 1 et 2 les même entreprises peuvent apparaitre plusieurs fois)

Merci d'avance pour votre aide.

Bonjour Ggibier, bonjour le forum,

Si la première ligne contient des étiquettes ("Nom de L'entreprise" et "Montant" par exemple), le code ci-dessous devrait convenir :

Sub Macro1()
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim N As Byte 'déclare la variable N (Numéro d'onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim K As Long 'déclare la variable K (incrément)
Dim NE As Long 'déclare la variable NE (Nombre d'Éléments)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For N = 1 To 2 'boucle 1 : sur les deux premiers onglets du classeur
    TV = Sheets(N).Range("A1").CurrentRegion 'définit le tableau des valeurs TV de l'onglet N
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        D(TV(I, 1)) = "" 'alimente le dictionnaire D avec la valeur de la colonne 1 du tableau des valeurs TV
    Next I 'prochaine ligne de la boucle 2
Next N 'prochain onglet de la boucle 1
TMP = D.Keys 'récupère dans le tableau temporaire TMP, la liste des valeurs du dictionnaire D sans doublon
K = 1 'initialise la variable K
For NE = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments NE du tableau temporaire TMP
    For N = 1 To 2 'boucle 2 : sur les deux premiers onglets du classeur
        TV = Sheets(N).Range("A1").CurrentRegion 'définit le tableau des valeurs TV de l'onglet N
        For I = 2 To UBound(TV, 1) 'boucle 3 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
            If TV(I, 1) = TMP(NE) Then 'condition : si la valeur ligne I colonne 1 de TV est égale à l'élément du tableau temporaire TMP
                ReDim Preserve TL(1 To 2, 1 To K) 'redimensionne le tableau des lignes TL (2 lignes, K colonnes)
                TL(1, K) = TMP(NE) 'récupère dans la ligne 1 la valeur de l'élément de TMP
                TL(2, K) = CDbl(TL(2, K)) + CDbl(TV(I, 2)) 'fait la somme des montants dans la ligne 2
            End If 'fin de la condition
        Next I 'prochaine ligne de la boucle 3
    Next N 'prochain onglet de la boucle 2
    K = K + 1 'incrémente K (rajoute une colonne au tableau ds lignes TL)
Next NE 'prochain élément du tableau temporaire TMP
Sheets(3).Range("A1").Resize(1, 2) = Application.Index(TV, 1) 'renvoie dans A1 redimensionnée du 3ème onglet la ligne des titres
Sheets(3).Range("A2").Resize(UBound(TL, 2), 2).Value = Application.Transpose(TL) 'renvoie dans A2 redimensionnée du 3ème onglet le tableau TL transposé
End Sub

merci beaucoup pour la réponse.

Je ne suis pas du tout habitué aux macros, tu n'aurais pas la meme chose avec une formule.... , désolé !

Re,

Non désolé. J'suis nul en formules... Regarde ma signature...

j'avais bien vu ta signature !! mais je me suis dit "allez je tente !!"

merci quand meme! je vais tenter de comprendre ce que tu m'as transmis !

Rechercher des sujets similaires à "report information"