Additionner les quantités de même référence en VBA

guigui76

XLDnaute Occasionnel
Bonjour,
pour un suivi de stock, j'utilise une scannette.
J'arrive à bien importer les valeurs de la scannette vers le fichier destination mais, je n'arrive pas à additionner les quantités de même références.

Exemple:
colonne A Colonne B
Nombre Référence
15 az
1 ag
14 az

Je ne vois pas comment faire pour additionner les valeurs identique et supprimer les doublons.
J'avais pensé une méthode avec Find + un bouclage mais cela va prendre beaucoup de temps.
Si vous avez une idée, je suis preneur.
Je vous remercie
 

Pièces jointes

  • cac.xlsm
    13.4 KB · Affichages: 38

youky(BJ)

XLDnaute Barbatruc
Salut à tous,
J'ai fait une macro mais à priori il faudra l'adapter
VB:
Sub myscan()
code = "58FRBBXN264B10676814078" 'code recu de la scanette à modifier
nb = InputBox("Entrez la Quantité", "Qté", 1)
'si annuler on quitte
If nb = "" Then Beep: Exit Sub
lig = Application.Match(code, Feuil1.[H1:H65536], 0)
If IsNumeric(lig) Then
'si code trouvé
cells(lig, 7) = cells(lig, 7) + nb
Else
'si pas trouvé ajout de ligne en bas
bas = [H65536].End(3).Row + 1
cells(bas, 8) = code
cells(bas, 7) = nb
End If
'pour le parc j'ai pas d'indication
End Sub
Bruno
 

guigui76

XLDnaute Occasionnel
Je viens de faire un test plus complet de la macro proposer par Oranger, il y bien un comptage du nombre différent de référence mais pas de la somme par référence.
voici une petite correction
Sub test()
'déclarations
Dim ValEnDoublon As Boolean
Dim tableau(100, 100) As Variant
Dim DerLig As Integer
Dim i_lig As Integer
Dim j As Integer
Dim NbElémentsTableau As Integer

'on cherche la dernière ligne remplie de la feuille
DerLig = Sheets("Feuil1").Range("H" & Rows.Count).End(xlUp).Row

'on initialise la variable à 0
NbElémentsTableau = 0

'on efface les anciennes données des colonnes A et B
Sheets("Feuil1").Range("A:B").ClearContents


'on parcours les lignes de la feuille
For i_lig = 19 To DerLig
'on intialise la variable
ValEnDoublon = False
'on parcours les éléments déjà présents dans le tableau
For j = LBound(tableau) To UBound(tableau)
'on cherche si la référence est déjà présente dans le tableau
If tableau(j, 1) = Sheets("Feuil1").cells(i_lig, 8) Then
'si on la trouve on intialise la variable afin d'indiquer que la référence ser trouve déjà dans le tableau
ValEnDoublon = True
'on incrémente la 2ème colonne du tableau qui fait le compte du nombre de référence identiques présentes dans le tableau
tableau(j, 2) = tableau(j, 2) + Sheets("Feuil1").cells(i_lig, 7)
'on quitte la boucle pour passer à la prochaine ligne
Exit For
End If
Next j

'si la référence c'est pas déjà présente dans le tableau
If ValEnDoublon <> True Then
'on ajoute le nom de la référence
tableau(NbElémentsTableau, 1) = Sheets("Feuil1").cells(i_lig, 8)
'on indique dans la deuxième colonne du tableau que c'est la première fois que l'on trouve la référence
tableau(NbElémentsTableau, 2) = Sheets("Feuil1").cells(i_lig, 7)
'on incrémente la variable qui compte le nombre d'éléments du tableau
NbElémentsTableau = NbElémentsTableau + 1
End If
Next i_lig

'on parcours les éléments du tableau
For j = LBound(tableau) To UBound(tableau)
'on les recopie dans les colonnes A et B de la feuil1. On indique J+1 car le compteur du tableau commence à 0 et la ligne de la feuil1 à 1
Sheets("Feuil1").cells(j + 1, 1) = tableau(j, 1)
Sheets("Feuil1").cells(j + 1, 2) = tableau(j, 2)
Next j
End Sub
 

laetitia90

XLDnaute Barbatruc
bonjour tous:):):)
tu peus utiliser un "dico" eventuellement
code
VB:
Sub es()
Dim t(), i As Long, m As Object
With Feuil1
Set m = CreateObject("Scripting.Dictionary")
t = .Range("h19:h" & .Cells(Rows.Count, 8).End(3).Row)
For i = 1 To UBound(t): m(t(i, 1)) = m(t(i, 1)) + 1: Next i
.[c1].Resize(m.Count, 1) = Application.Transpose(m.keys)
.[d1].Resize(m.Count, 1) = Application.Transpose(m.items)
End With
End Sub
 

Si...

XLDnaute Barbatruc
Bon_jour

Pour faire un clin d'œil à léti ;):D … car peut-être moins rapide sur une longue distance :
et avec un Filtre avancé sur la zone nommée (Plage dans mon exemple) ?

VB:
Private Sub Si_Click()
  [A:B] = ""
  Range("Plage").AdvancedFilter 2, CopyToRange:=[A1], Unique:=1
  Range("B2:B" & [A1].End(xlDown).Row) = Application.CountIf(Plage, [A1])
End Sub
 

Pièces jointes

  • Stat.xlsm
    17.4 KB · Affichages: 45

Discussions similaires

Statistiques des forums

Discussions
312 090
Messages
2 085 210
Membres
102 820
dernier inscrit
SIEG68