MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

PASCAL84810

XLDnaute Junior
Bonjour,

je cherche à connaitre le nombre de bon de préparation de commande dont tous les articles ont été prélevé dans le même magasin donné. je peux le faire avec un TDC, mais je voudrais une macro,en précisant le nom du magasin, qui me donne directement le nombre. J'ai 3 colonnes avec des milliers d'articles, des centaines d'emplacements magasin,
et des milliers de bon de préparation, j'ai besoin de connaitre le nombre de bp dont tous les prélèvements d'articles sont dans le même magasin exemple le magasin X
exemple
ART N° BP magasin
A 01 X
B 02 Y
C 03 Z
D 02 Z
E 02 Z
F 01 X
merci pour votre retour
 

gosselien

XLDnaute Barbatruc
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

Bonjour,

par VBA, je le laisse au(x) spécialiste(s) mais en formule :
en nommant tes 3 colonnes de données auparavant...

=SOMMEPROD((art=A2)*(num=B2)*(magasin=C2))

P.
 

Paf

XLDnaute Barbatruc
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

Bonjour à tous

une macro qui détermine le nombre de bons différents pour un magasin.

Sans disposer de la structure du classeur, les plages de données sont certainement à adapter.

Code:
Sub Magasin()
 Dim Derlig As Long, MonDico As Dictionary, Tableau, Magasin, i
 Set MonDico = CreateObject("Scripting.Dictionary")


 Magasin = "X"
 Derlig = Range("B" & Rows.Count).End(xlUp).Row

 Tableau = Range("B1:C" & Derlig)
  For i = LBound(Tableau) To UBound(Tableau)
    If Tableau(i, 2) = Magasin Then
        MonDico(Tableau(i, 1)) = ""
    End If
  Next i
  Range("F3") = MonDico.Count
End Sub

le nom du magasin est en "dur" dans le code, on pourrait imaginer une liste de validation, contenant les noms de magasins, qui à la sélection déclencherait cette macro.

A+

A la réflexion,
je n'ai pas pris en compte :
j'ai besoin de connaitre le nombre de bp dont tous les prélèvements d'articles sont dans le même magasin

Dans votre exemple, le bon N°02 est compté une fois pour le magasin Y et une fois pour le magasin Z .

A reprendre ?

A+
 

PASCAL84810

XLDnaute Junior
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

bonjour,

merci pour vos réponses,
en fait oui, je veux connaitre, sur un liste générale de bon de préparation, le nombre de bon de préparation dont, bien tous les articles, sur le bon on était prélevé dans le même magasin désigné. si le bon contient 12 articles par exemple il faut que les 12 soient prélevés dans le même magasin pour être pris en compte dans le comptage.
On peut mettre le magasin dans le code en dur, ce n'est pas un problème, car sur tout les magasins seuls les deux plus grands m’intéresse.


merci
cordialement
 

Paf

XLDnaute Barbatruc
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

Re,

Si vous pouviez joindre un classeur avec un volume de données important (quelques milliers de lignes non confidentielles) je pourrais confirmer que la macro proposée fonctionne, et tester la modif (pour répondre précisement à la demande) et contrôler les temps de traitement.

A+
 

PASCAL84810

XLDnaute Junior
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

j'ai eu un problème avec la taille

désolé
Pascal
 

Pièces jointes

  • excel-downloads.com.xlsx
    232.2 KB · Affichages: 42
  • excel-downloads.com.xlsx
    232.2 KB · Affichages: 46
  • excel-downloads.com.xlsx
    232.2 KB · Affichages: 63

Paf

XLDnaute Barbatruc
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

Re,

sur tout les magasins seuls les deux plus grands m’intéresse.

quels sont-ils? après quelques essais je n'ai que des résultats à 0

A+
 

PASCAL84810

XLDnaute Junior
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

Je pris de m'excuser,
j'ai mal choisie la partie que j'ai extraite du fichier trop lourd. le magasin à analyser dans ce fichier est "MAG"

encore merci pour le temps que vous m'accordez

cordialement

Pascal
 

Pièces jointes

  • excel-downloads.com.xlsx
    269.1 KB · Affichages: 66
  • excel-downloads.com.xlsx
    269.1 KB · Affichages: 60
  • excel-downloads.com.xlsx
    269.1 KB · Affichages: 98

Paf

XLDnaute Barbatruc
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

je trouve 147 bons pour MAG dans le premier classeur

Est ce plausible ?

je vais faire les essais sur le 2ème classeur qui comporte ( comme le premier) des noms de magasin curieux = 4,00E+40, 7,00E+60 qui semblent être la notation scientifique d'un nombre élevé.

Je voulais faire afficher la liste des magasins avec le nombre de bons, ... mais plus de 1200 magasins...!

A+
 

PASCAL84810

XLDnaute Junior
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

Paf,

j'appelle tout les emplacements "magasin", mais il y a une grande majorité d'emplacements palettes
les nombres scientifiques sont en fait, les emplacements de l'allée 1E de l’Entrepôt que EXCEL transforme, c'est une extraction CSV de ERP, j'aurais du faire une extraction TXT pour avoir "1E0600" par exemple.

cordialement,

Pascal
 

Paf

XLDnaute Barbatruc
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

Re

Après essais sur le 2ème classeur , pour MAG , 1560 bons 'exclusifs' sur 2921 au total, en +/- 35 secondes sur mon vieux PC.

Code:
Sub Magasin()
Dim Derlig As Long, MonDico As Dictionary, ListMag As Dictionary, Tableau, Magasin, i, k, n
Dim TabMag, NbTot
Set MonDico = CreateObject("Scripting.Dictionary")
'Set ListMag = CreateObject("Scripting.Dictionary")
Dim debut, j
Dim Message, Title, Default


Message = "Entrez le nom du magasin"
Title = "Décompte des BP "
Default = "MAG"

Magasin = InputBox(Message, Title, Default)


 'debut = Timer

 'Magasin = "MAG"

 Derlig = Worksheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row

 Tableau = Worksheets("Feuil1").Range("B2:C" & Derlig)
  
  '** comptage global des bons pour le magasin
  For i = LBound(Tableau) To UBound(Tableau)
    If Tableau(i, 2) = Magasin Then
        MonDico(Tableau(i, 1)) = ""
    End If
  Next i
  NbTot = MonDico.Count 'Nb total de bons
   k = MonDico.Keys 'transfert dans le tableau k
   '**suppression des bons communs à d'autres magasins
  For n = LBound(k) To UBound(k)
    For i = LBound(Tableau) To UBound(Tableau)
        If Tableau(i, 1) = k(n) And Tableau(i, 2) <> Magasin Then
            MonDico.Remove (Tableau(i, 1))
            Exit For
        End If
    Next
  Next n
  
  MsgBox "Au total " & NbTot & " Bon(s) traités par le magasin " & Magasin & ", dont " & MonDico.Count & " en totalité"
  
  'MsgBox Timer - debut

End Sub

avant de lancer la macro, dans l'éditeur VBA, sous <Outils> puis <références> , il faut cocher Microsoft Scripting Runtime, pour que ça fonctionne.


Je vais tenter de raccourcir le temps de traitement... c'est pas gagné

A+
 

PASCAL84810

XLDnaute Junior
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

merci beaucoup,

c'est parfait. 35' cela me va, cela fait parti d'un tableau de bord qui est composé d'une quinzaine de macro plus des bouts d'enregistrement du développeur. Pour 400 000 lignes cela tourne en 45minutes.

cordialement
pascal

pascal
 

PASCAL84810

XLDnaute Junior
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

Paf

une dernière chose, j'ai parcouru le forum et j'ai essayé par moi même sans résultat.
je voudrais que NbTot s’écrive aussi dans la cellule x de la feuille X de même pour MonDico.Count

merci
cordialement
Pascal
 

Paf

XLDnaute Barbatruc
Re : MACRO connaitre le nombre de fois ou toutes les lignes d'une commande

Re

Suite ...et fin ( en principe ...)

code modifié qui donne le même résultat mais en +/- 1 seconde

Code:
Sub Magasin_V2()
 Dim Derlig As Long, BonMag As Dictionary, BonGlobal As Dictionary, Tableau, Magasin As String
 Dim NbTot As Long, i As Long, c

 Dim Message, Title, Default

 Set BonMag = CreateObject("Scripting.Dictionary")
 Set BonGlobal = CreateObject("Scripting.Dictionary")


 Message = "Entrez le nom du magasin"
 Title = "Décompte des BP "
 Default = "MAG"

 Magasin = InputBox(Message, Title, Default)


 Derlig = Worksheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row

 Tableau = Worksheets("Feuil1").Range("B2:C" & Derlig)
  
  '** comptage global des bons pour le magasin et nombre de bon pour les autres magasins
  For i = LBound(Tableau) To UBound(Tableau)
    If Tableau(i, 2) = Magasin Then
        BonMag(Tableau(i, 1)) = ""
    Else
        BonGlobal(Tableau(i, 1)) = BonGlobal(Tableau(i, 1)) + 1
    End If
  Next i

  NbTot = BonMag.Count 'Nb total de bons

 For Each c In BonGlobal.Keys
     If BonMag.Exists(c) Then BonMag.Remove (c)
 Next c
  
 MsgBox "Au total " & NbTot & " Bon(s) traités par le magasin " & Magasin & ", dont " & BonMag.Count & " en totalité"

End Sub

Pour écrire les résultats dans une feuille, rajouter (juste avant End Sub) ces lignes à adapter:

Worksheets("Feuil1").Range("F2") = NbTot
Worksheets("Feuil1").Range("F3") = BonMag.Count


Bonne suite
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 216
Membres
103 158
dernier inscrit
laufin