IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Utilisation des clés de Dictionary dans une variable tableau


Sujet :

Contribuez

  1. #1
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut Utilisation des clés de Dictionary dans une variable tableau
    Bonjour,

    Comme ne l'indique pas le (trop court) titre de ce sujet, une utilisation des clés d'objets dictionary dans une variable tableau à deux dimensions, nous permet d'obtenir rapidement une jolie récap d'un classeur.

    Je pars de ces hypothèses de départ :
    Un classeur contenant 12 feuilles (mois), avec sur chaque feuille :
    - Colonne A : des noms de vendeurs,
    - Colonne B : des noms de produits,
    - Colonne C : des quantités

    Nous souhaitons obtenir, dans une feuille "Récap", les quantités de chaque produits vendus par chaque vendeurs.
    Un TCD me direz vous?
    Bien sur, pourquoi pas...
    Je vous propose cette alternative sous forme de macro.

    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Option Explicit
     
    Sub RécapAvecSommeDesColonnesC()
    Dim Feuille As Worksheet, i As Long
    Dim TablVendeurs(), DicoVendeurs As Object
    Dim TablVentes(), DicoVentes As Object
    Dim Sommes()
     
    Set DicoVendeurs = CreateObject("Scripting.Dictionary")
    Set DicoVentes = CreateObject("Scripting.Dictionary")
    'remplissage des étiquettes de lignes et de colonnes sans doublons
    For Each Feuille In ThisWorkbook.Worksheets
        If Feuille.Name <> "Récap" Then
            With Feuille
                TablVendeurs = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
                For i = LBound(TablVendeurs, 1) To UBound(TablVendeurs, 1)
                    If Not DicoVendeurs.exists(TablVendeurs(i, 1)) Then DicoVendeurs.Add TablVendeurs(i, 1), TablVendeurs(i, 1)
                Next i
                TablVentes = .Range("B2", .Range("B" & Rows.Count).End(xlUp))
                For i = LBound(TablVentes, 1) To UBound(TablVentes, 1)
                    If Not DicoVentes.exists(TablVentes(i, 1)) Then DicoVentes.Add TablVentes(i, 1), TablVentes(i, 1)
                Next i
            End With
        End If
    Next Feuille
    'remplissage de la variable tableau 2D grâce aux clés de Dictionary
    ReDim Sommes(1 To DicoVendeurs.Count, 1 To DicoVentes.Count)
    For Each Feuille In ThisWorkbook.Worksheets
        If Feuille.Name <> "Récap" Then
            With Feuille
                For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
                    Sommes(Application.Match(.Cells(i, 1), DicoVendeurs.keys, 0), Application.Match(.Cells(i, 2), DicoVentes.keys, 0)) = Sommes(Application.Match(.Cells(i, 1), DicoVendeurs.keys, 0), Application.Match(.Cells(i, 2), DicoVentes.keys, 0)) + .Cells(i, 3).Value
                Next i
            End With
        End If
    Next Feuille
    With Sheets("Récap")
        .Range("A2").Resize(DicoVendeurs.Count, 1) = Application.Transpose(DicoVendeurs.keys)
        .Range("B1").Resize(1, DicoVentes.Count) = DicoVentes.keys
        .Range("B2").Resize(UBound(Sommes, 1), UBound(Sommes, 2)) = Sommes()
    End With
    End Sub
    Ci-joint une petite démo

    Qu'en dites vous?
    Cordialement,
    Franck

  2. #2
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour
    Bravo, propre et rapide,
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

Discussions similaires

  1. Utilisation des niveaux d'isolation dans une transaction
    Par benradw dans le forum Accès aux données
    Réponses: 0
    Dernier message: 03/05/2010, 13h59
  2. Supprimer des retour à la ligne dans une variable
    Par havany dans le forum Langage
    Réponses: 3
    Dernier message: 28/01/2010, 12h12
  3. passer des nom de symbole dans une variable
    Par eveilside dans le forum Flash
    Réponses: 2
    Dernier message: 29/05/2009, 08h52
  4. Utiliser des ALIAS de colonnes dans une jointure
    Par mbzhackers dans le forum SQL
    Réponses: 4
    Dernier message: 31/03/2008, 10h27
  5. Utilisation des méthodes de classe dans une autre classe
    Par ChriGoLioNaDor dans le forum C++
    Réponses: 4
    Dernier message: 28/07/2007, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo