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
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 SubHervé.