Mettre un compteur dans un compteur VBA

Bonjour,

J'ai un fichier excel ("donnees") qui contient des données de base dans lequel on retrouve les différents nom de sociétés (coca cola , ice tea....) qui viennent s’installer à tel endroit ou tel endroit (Paris, Marseille....) aux années correspondantes (2012, 2013......).

Actuellement le code VBA que j'ai calcul le nombre de fois qu'il trouve le même lieu (paris....) dans ce classeur puis renvoi sa valeur au classeur "recap". (vous pouvez le consulter dans le fichier 'donnees')

Par exemple si dans le classeur "donnee" on a 'coca cola' à Paris puis à la ligne de dessous 'Ice Tea' à Paris aussi , l'algo. renverra Paris avec la valeur de 2 qui correspondra aux deux société qui sont présente à Paris.

idem pour les autres villes... Jusque là c'est parfait.

Maintenant j'aimerais rajouter l'Année qui correspond à la présence des sociétés : par exemple si 'coca cola' s'installe à Paris en 2012 , 'Ice Tea' fait pareil et 'Fanta' s'installe à Paris en 2013. J'aimerais que l'algo. prend en compte l'année c'est à dire me renvoi dans mon fichier "recap" Paris à pour valeur 2 (coca cola et Ice Tea) en 2012 et Paris a aussi la valeur de 1 (Fanta) en 2013.

Voir l’illustration du fichier 'donnees' : j'ai mis des couleurs pour bien montré qu'il y a des correspondance (même lieu au même endroit) puis j'ai rempli à la main le fichier "recap" pour vous montrer le resultat attendu.

J'ai essayé d'être le plus clair possible , si ce n'est pas le cas dites moi ce qui va pas, merci Beaucouppp

190donnees.xlsm (19.80 Ko)
158recap.xlsx (11.93 Ko)

Bonjour,

A l'aide d'un dictionnaire. A mettre dans un module standard du classeur "donnees.xlsm" et tester. Le classeur "recap.xlsx" devant être ouvert bien sûr :

Sub Chercher()

    Dim Classeur As Workbook
    Dim Dico As Object
    Dim Cle As Variant
    Dim Element As Variant
    Dim Tbl
    Dim Plage As Range
    Dim Cel As Range
    Dim Concat As String
    Dim I As Integer

    'défini la plage sur la feuille "Feuil1" en colonne "B" du classeur "donnees.xlsm"
    With Workbooks("donnees.xlsm").Worksheets("Feuil1")

        Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp))

    End With

    'crée le dico
    Set Dico = CreateObject("Scripting.Dictionary")

    'parcour les cellules de la colonne B
    For Each Cel In Plage

        'effectue une concaténation de la ville et de l'année avec un ";"
        '(le ";" sert à spliter ensuite)
        Concat = Cel.Value & ";" & Cel.Offset(0, 2).Value

        'si il n'existe pas, l'ajoute et commence à 1
        'sinon, incrémente
        If Dico.exists(Concat) = False Then

            Dico.Add Concat, 1

        Else

            Dico(Concat) = Dico(Concat) + 1

        End If

    Next Cel

    'défini la collection de clés et d'items
    Cle = Dico.keys
    Element = Dico.items

    'classeur devant recevoir les valeurs
    Set Classeur = Workbooks("recap.xlsx")

    'parcour
    For I = 0 To Dico.Count - 1

        'dissocie les valeurs
        Tbl = Split(Cle(I), ";")

        'puis les reporte dans les colonnes en commençant à la ligne 3
        With Classeur.Worksheets("Feuil1")

            .Range("A" & I + 3) = Tbl(0)
            .Range("E" & I + 3) = Element(I)
            .Range("F" & I + 3) = Tbl(1)

        End With

    Next I

End Sub

Hervé.

Rechercher des sujets similaires à "mettre compteur vba"