Bonjour à tous,
Voici un petit bout de code qui utilise le dictionnaire.
1. Le code balaye une série d'occurence présentent dans une colonne "F"
1.1 Si il s'agit d'une nouvelle occurence, celle-ci est ajoutée au dictionnaiore et le code récupère le montant situé à 12 colonnes
1.2 Si une occurence existe déjà, elle n'est pas ajoutée au dictionnaire mais le montant est ajouté au montant de l'occurence existance (il se totalise)
J'arrive à additionner les montants dans une cellule... mais impossible de réaliser cette addition dans le dictionnaire.
Si quelqu'un voit quelque chose qui lui saute aux yeux...
Merci beaucoup par avance !
Bonne soirée à tous,
'-----------------------------------------------
Sub...
Dim Dico As Object
Dim Cell As Range
Dim FeuilleSource As Worksheet
Dim FeuilleDestination As Worksheet
Dim Valeur As Variant
Dim Nom As String
Dim Montantdebut as Double
Dim NewMontant as Double
Dim AdditionMontant as Double
Dim Montant As Double
Dim ws As Worksheet
' Créer un objet dictionnaire pour stocker les valeurs uniques et leurs montants cumulés
Set Dico = CreateObject("Scripting.Dictionary")
' Définir les feuilles de travail
Set FeuilleSource = ThisWorkbook.Sheets("N")
Set FeuilleDestination = ThisWorkbook.Sheets("BDD N")
' Parcourir chaque cellule dans la colonne F de la feuille Source
For Each Cell In FeuilleSource.Range("F2:F" & FeuilleSource.Cells(FeuilleSource.Rows.Count, "F").End(xlUp).Row)
Valeur = Cell.Value
Nom = Cell.Offset(0, 4).Value ' Récupérer le nom en offset
Montant = Cell.Offset(0, 12) ' Récupérer le montant en offset
' Vérifier si la valeur existe déjà dans le dictionnaire
If Dico.exists(Valeur) Then
Montantdebut = Dico(Valeur)(1)
NewMontant = Montant
AdditionMontant = MontantDebut + NewMontant
Sheets("Test").range("A1") = AdditionMontant <---------- Addition Ok
' Mettre à jour uniquement le montant cumulé
Dico(Valeur)(1) = Dico(Valeur)(1) + Montant <---------- Aucune addition ne s'effectue à ce niveau...
Else
' Ajouter un nouvel élément avec le nom et le montant initial
Dico.Add Valeur, Array(Nom, Montant)
End If
Next Cell
...
End sub
Voici un petit bout de code qui utilise le dictionnaire.
1. Le code balaye une série d'occurence présentent dans une colonne "F"
1.1 Si il s'agit d'une nouvelle occurence, celle-ci est ajoutée au dictionnaiore et le code récupère le montant situé à 12 colonnes
1.2 Si une occurence existe déjà, elle n'est pas ajoutée au dictionnaire mais le montant est ajouté au montant de l'occurence existance (il se totalise)
J'arrive à additionner les montants dans une cellule... mais impossible de réaliser cette addition dans le dictionnaire.
Si quelqu'un voit quelque chose qui lui saute aux yeux...
Merci beaucoup par avance !
Bonne soirée à tous,
'-----------------------------------------------
Sub...
Dim Dico As Object
Dim Cell As Range
Dim FeuilleSource As Worksheet
Dim FeuilleDestination As Worksheet
Dim Valeur As Variant
Dim Nom As String
Dim Montantdebut as Double
Dim NewMontant as Double
Dim AdditionMontant as Double
Dim Montant As Double
Dim ws As Worksheet
' Créer un objet dictionnaire pour stocker les valeurs uniques et leurs montants cumulés
Set Dico = CreateObject("Scripting.Dictionary")
' Définir les feuilles de travail
Set FeuilleSource = ThisWorkbook.Sheets("N")
Set FeuilleDestination = ThisWorkbook.Sheets("BDD N")
' Parcourir chaque cellule dans la colonne F de la feuille Source
For Each Cell In FeuilleSource.Range("F2:F" & FeuilleSource.Cells(FeuilleSource.Rows.Count, "F").End(xlUp).Row)
Valeur = Cell.Value
Nom = Cell.Offset(0, 4).Value ' Récupérer le nom en offset
Montant = Cell.Offset(0, 12) ' Récupérer le montant en offset
' Vérifier si la valeur existe déjà dans le dictionnaire
If Dico.exists(Valeur) Then
Montantdebut = Dico(Valeur)(1)
NewMontant = Montant
AdditionMontant = MontantDebut + NewMontant
Sheets("Test").range("A1") = AdditionMontant <---------- Addition Ok
' Mettre à jour uniquement le montant cumulé
Dico(Valeur)(1) = Dico(Valeur)(1) + Montant <---------- Aucune addition ne s'effectue à ce niveau...
Else
' Ajouter un nouvel élément avec le nom et le montant initial
Dico.Add Valeur, Array(Nom, Montant)
End If
Next Cell
...
End sub