Code VBA ou astuce à l'aiide !!

lamghari

XLDnaute Nouveau
bonjour,
j'ai une énorme base de donnée, j'ai récupéré les données avec excel mais j'aimerai rajouter une cellule qui va me simplifier énormément le travail (voir image)
Capture d’écran 2016-06-02 à 20.58.23.jpg
en gros je veux un code qui me permettra de mettre automatiquement la somme des 12 mois dans la cellule conso_annuelle ( vu que j'ai 100 000 données ça va être pas possible de faire manuellement .. )
je mets le fichier excel en joint si quelqu'un pourra m'aider bien évidemment
merci d'avance !!
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Code VBA ou astuce à l'aiide !!

Bonsoir Lamghari, bonsoir le forum,

Toujours et encore ma vielle histoire du pneu crevé... L'autre jour je crève un pneu, je le prends en photo et apporte la photo à mon garagiste. Il n'a pas pu le réparer ce naze !...

Ne prends pas pour prétexte la taille de ton fichier. Nous n'avons besoin pour t'aider que d'un fichier exemple avec la même structure que ton fichier original et une poignée de données significatives...
 

Modeste geedee

XLDnaute Barbatruc
Re : Code VBA ou astuce à l'aiide !!

Bonsour®
en E2 :
=SOMMEPROD($L$2:$L$100000*($J$2:$J$100000=Table1[[#Cette ligne];[CLIENT]]*(ANNEE($K$2:$K$100000)=2015)))
Capture.jpg
 

Pièces jointes

  • Capture.jpg
    Capture.jpg
    28.1 KB · Affichages: 25
  • younes.xlsx
    16 KB · Affichages: 17
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Code VBA ou astuce à l'aiide !!

Bonsoir le fil, bonsoir le forum,

Tu parles dans l'énoncé du post #1 de cellule conso_annuelle. J'avais déduis qu'il s'agissait d'une plage nommée mais je ne l'ai pas trouvée. J'ai donc renvoyé le résultat dans un tableau à partir de la cellule H1. Tu adapteras...

Le code :

Code:
Sub Macro3()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnsaire)
Dim I As Long 'déclare la variable I (Incrément)
Dim TP As Variant 'déclare la variable TP (Tableau Temporaire)
Dim TS() As Variant 'déclare la variable TS (Tableau des Sommes)

Set O = Sheets("file1.csv") 'définit l'onglet O
O.Range("H1:I" & O.Range("H" & Application.Rows.Count).End(xlUp).Row).ClearContents 'efface d'enventuelles anciennes sommes
TV = O.Range("J1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données de la colonne 1 du tableau des valeurs TV
Next I 'prochaine ligne de la boucle
TP = D.keys 'récupère dans le tableau temporaire TP la liste des éléments du dictionnaire sans doublon
ReDim TS(1, UBound(TP)) 'redimensionne le tableau des sommes TS (deux lignes, autant de colonnes que TP a de lignes)
For J = 0 To UBound(TP) 'boucle 1 : sur tous les éléments du tableau temporaire TP
    TS(0, J) = "Somme " & TP(J) 'définit la valeur de la première ligne de TS(J)
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        'si la données ligne I colonne 1 de TV est égale à l'élément TP(J), définit la valeur de la seconde ligne de TS
        '(en faisant la somme des valeurs en colonne 3 de TV)
        If TV(I, 1) = TP(J) Then TS(1, J) = TS(1, J) + TV(I, 3)
    Next I 'prochaine ligne de la boucle 2
Next J 'prochain élément de la boucle 1
O.Range("H1").Resize(UBound(TP) + 1, 2).Value = Application.Transpose(TS) 'renvoie dans H1 redimensionnée le tableau TS transposé
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Code VBA ou astuce à l'aiide !!

Bonjour le fil, bonjour le forum,

Ben... le code est basé sur le tien évidemment ! Sinon quel intérêt ?...
 

Pièces jointes

  • Lamghari_v01.xlsm
    18.7 KB · Affichages: 17

Robert

XLDnaute Barbatruc
Repose en paix
Re : Code VBA ou astuce à l'aiide !!

Re,

Il eut été bon d'avoir aussi le message d'erreur !...
Le problème est peut-être dû à une référence manquante. Dans VBE (Visual Basic Editor), menu Outil / Références... si tu as une référence indiquant manquante, décoche la et réessaie...

Regarde les références que j'ai sur mon PC et compare...

Msg.jpg
 

Pièces jointes

  • Msg.jpg
    Msg.jpg
    129.5 KB · Affichages: 27

Si...

XLDnaute Barbatruc
Re : Code VBA ou astuce à l'aiide !!

salut

Robert, ta version fonctionne chez moi avec mon 2010 pas maqué ;) !

Si la plage récupérée se présente toujours ainsi Code, 12 mois, sommes, Code, 12 mois, sommes … ,
en passant par une formule (pas la même que celle de Modeste GeeDee;)) transformée en VBA
Code:
Private Sub CommandButton1_Click()
 [TF[Conso_An]].FormulaLocal = "=SOMME.SI(TC[PLS];[@CLIENT];TC[CONSO])"
 [TF[Conso_An]] = [TF[Conso_An]].Value
End Sub
où TF est le Tableau à remplir et TC le tableau récupéré.
 

Pièces jointes

  • Tableau SommeSi.xlsm
    21.6 KB · Affichages: 15

Discussions similaires

Réponses
3
Affichages
149
Réponses
6
Affichages
574

Statistiques des forums

Discussions
314 206
Messages
2 107 237
Membres
109 781
dernier inscrit
Alex55320