Recherche sur plusieurs champs

coyane

XLDnaute Nouveau
Bonjour,

Je sèche complétement
Cf fichier joint

je cherche à restituer dans la colonne D, des données du champ 3 (colonne C) avec par exemple :

- pour le champ 1 AI87, reporter dans chaque cellule du champ 4, la somme des valeurs du champ 3 pour les données du champ 2 en 1368 et 2968 quand tu les trouves

...Et ainsi de suite pour les autres champs 1...

Est-ce que c'est possible à faire ??? :confused:

Merci de votre aide

Cordialement
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche sur plusieurs champs

Bonjour le fil, bonjour le forum,

En pièce jointe une proposition VBA avec le code ci-dessous :
Code:
Sub Macro1()
Dim O As Object 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim T As Double 'déclare la variable T (Total)
Dim PLV As Range 'déclare la variable PLV (PLage des cellule Visibles)

Set O = Sheets("Feuil1") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne 1 (=A) de l'onglet O
Set PL = O.Range("A2:A" & DL) 'définit la plage PL
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionanire D
For Each CEL In PL 'boucle sur toutes les cellule CEL de la plage PL
    D(CEL.Value) = "" 'alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle
TMP = D.keys 'récupère les valeurs uniques (sans doublons) des valeurs de la plage PL dans le tableau temporaire TMP
For I = 0 To UBound(TMP) 'boucle 1 : sur toutes les valeurs uniques
    T = 0 'réinitialise le total T
    O.Range("A1").AutoFilter Field:=1, Criteria1:=TMP(I) 'filtre la colonne 1 (=A) par rapport à la valeur unique TMP(I)
    Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit la plage PLV des cellules visibles (après filtarge) de la plage PL
    For Each CEL In PLV.Offset(0, 1) 'boucle 2 : sur toutes les cellules CEL de la palge PLV décalée d'une colonne à droite (=colonne B)
        If CStr(CEL.Value) = "1368" Then T = T + CDbl(CEL.Offset(0, 1).Value) 'si la cellule contient "1368", définit le total T
        If CStr(CEL.Value) = "2968" Then T = T + CDbl(CEL.Offset(0, 1).Value) 'si la cellule contient "2968", définit le total T
    Next CEL 'prochaine cellule de la boucle 2
    For Each CEL In PLV 'boucle 3 : sur toutes les cellules CEL de la palge PLV décalée d'une colonne à droite (=colonne B)
        CEL.Offset(0, 3).Value = T 'place le total T dans la cellule en colonne D
    Next CEL 'prochaine cellule de la boucle 3
    O.Range("A1").AutoFilter 'supprime le filtre automatique
Next I 'prochaine valeur unique de la boucle 1
End Sub
Le fichier :
 

Pièces jointes

  • Coyane_v01.xlsm
    19.8 KB · Affichages: 27

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche sur plusieurs champs

Bonjour Coyane, bonjour le forum,

Il y a parmi nous des magiciens qui font ce qu'ils veulent avec les formules. Aussi je ne répond plus "non" à ce genre de question. Malheureusement, moi je ne sais pas faire...
 

coyane

XLDnaute Nouveau
Re : Recherche sur plusieurs champs

Bonjour Coyane, bonjour le forum,

Il y a parmi nous des magiciens qui font ce qu'ils veulent avec les formules. Aussi je ne répond plus "non" à ce genre de question. Malheureusement, moi je ne sais pas faire...


Bonjour,

Pas de problème, je posais la question car je ne connais pas le VBA.
Ce que vous avez fait est déjà "énorme".
Encore merci et bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
312 430
Messages
2 088 359
Membres
103 827
dernier inscrit
TiphaineBnd