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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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.
 
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+
 
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
 
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+
 
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

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+
 
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
 
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+
 
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

K
Réponses
5
Affichages
942
Z
Réponses
6
Affichages
1 K
zaazaa23
Z
M
Réponses
2
Affichages
1 K
micmond
M
Réponses
18
Affichages
4 K
G
Réponses
2
Affichages
1 K
Galaxie66
G
C
Réponses
4
Affichages
2 K
cerb_r
C
Retour