XL 2016 Demande aide formule

NLP2016

XLDnaute Nouveau
Bonjour,

Dans ce fichier Excel il y a trois colonnes: une colonne magasin, une colonne article et une colonne quantité. Je souhaiterais faire ressortir les articles qui sont uniquement sortis sur le magasin Garnier(sachant que la grande majorité des articles sont sortis dans l'ensemble des magasin).

Pourriez-vous m'aider afin de trouver une formule ou autres?

Merci à vous
Sorties articles par magasinsin.xlsx
 

Pièces jointes

  • Sorties articles par magasinsin.xlsx
    335.3 KB · Affichages: 16

R@chid

XLDnaute Barbatruc
Bonjour @ tous,
la question c'est de ressortir la liste des articles qui sont sortis sur le magasin Garni et qui ne sont jamais sortis sur les autres magasins.
Par formules c'est compliqué et surtout avec une base de 18 mille lignes, 2219 articles et 12 magasin.
Un code VBA sera plus léger et plus rapide je pense.
Si tu n'as pas reçu une bonne réponse d'ici le soir je vais essayer de te le faire par formules.


Cordialement
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Un code VBA sera plus léger et plus rapide je pense.
Comme l'a suggéré @Ra@chid, un essai par VBA. Le code est dans le module de code de Feuil1. nIl est un peu commenté.

VB:
Sub test()
Dim Ref, t, dico, clef, i&, j&, ligne, n&

   Ref = UCase(InputBox("Saisir le code du Magasin:"))      'saisie du code magasin désiré
  
   Application.ScreenUpdating = False
   If Me.FilterMode Then Me.ShowAllData   'si filtre, on affiche toutes les données (pour que le End() fonctionne correctement)
   t = Range("a1:c" & Cells(Rows.Count, "a").End(xlUp).Row)    'lecture des données sources dans le tableau t
  
   Set dico = CreateObject("scripting.dictionary")    'création du dico
   dico.CompareMode = TextCompare      'on ne distingue pas les majuscules des minuscules pour les clefs du dico
   For i = 2 To UBound(t)     'on parcourt les lignes de tableau t (sauf l'en-tête)
      clef = CStr(t(i, 2))    'la clef : c'est le code article
      'si la clef correspond au magasin désiré, on rajoute le numéro de la ligne de l'article dans l'item correspondant à clef
      If t(i, 1) = Ref Then dico(clef) = dico(clef) & ";" & i
   Next i
        
   For i = 2 To UBound(t)     'une nouvelle fois, on parcourt les lignes de tableau t (sauf l'en-tête)
      clef = CStr(t(i, 2))    'la clef : c'est le code article
      ' Si le magasin  n'est pas le magasin désiré, et alors si l'article ne fait partie de dico
      ' et cela signifie que le produit n'est pas uniquement dans le magasin désiré.
      ' On élimine donc ce produit du magasin désiré (donc de dico)
      If t(i, 1) <> Ref Then If dico.Exists(clef) Then dico.Remove clef
   Next i
  
   'il ne reste plus dans dico que les articles qui ne sont pas aussi sortis par d'autres magasins.
   'on va "tasser" les lignes correspondant aux articles uniquement sortis du magasin désiré
   'dans le haut du tableau. n sera le compteur de lignes du résultat final
   n = 1       'n = 1 car on conserve la ligne des en-têtes
   For Each clef In dico      ' pour chaque article (unique) du magasin désiré (donc les éléments de dico)
      For Each ligne In Split(Mid(dico(clef), 2), ";")   ' pour chaque ligne correspondant à l'article
                                                         ' le mid() sert à sauter le ";" en tête. Sinon
                                                         ' le premier élément du split serait la chaine vide
            n = n + 1      'le numéro de ligne du résultat est incrémenté de 1
            For j = 1 To UBound(t, 2): t(n, j) = t(ligne, j): Next      'copie de la ligne i vers la ligne n
      Next ligne
   Next clef
        
   Range("g1").Resize(Rows.Count, 3).ClearContents    'RàZ des résultats précédents
   Range("g1").Resize(n, 3) = t     'transfert du résultat (ligne 1 à n de t) sur la feuille
End Sub
 

Pièces jointes

  • NLP2016- Sorties par magasin- v1.xlsm
    345.5 KB · Affichages: 3
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 741
Messages
2 082 055
Membres
101 882
dernier inscrit
XaK_