Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro qui fait un listing

  • Initiateur de la discussion Initiateur de la discussion sircroco
  • Date de début Date de début

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 !

sircroco

XLDnaute Nouveau
Bonjour à vous,

J'espère que vous allez bien, je fais ce topic car j'ai besoins d'une petite macro sur le fichier Alpha qui permet de lister (sur la feuille Sheet2) tous les couples Magasin-Article qui ont aucune commande à l'année 2018 .

Par exemple dans le cas qu'on a ici, on aurait dans Sheet2:
150 BMW M3
150 RS3 AUDI
200 CLIO3

Je souhaite donc une macro qui permet de faire ça.
On pourrait faire ça avec un TCD mais ça serait long à faire si la liste est longue.

Il y a déjà la macro "Pas de commande en 2018" mais ça ne produit pas le résultat attendu... . (En PJ)
 

Pièces jointes

Oui mais malheureusement sa macro finale ne correspond pas vraiment à ce que j'attendais.

On y arrive... votre macro n'a pas pris en compte deux choses importantes :

- Dans Sheet2 je souhaite uniquement les colonnes Magasins et articles
- Dans Sheet2 toujours, je ne veux pas qu'on fait apparaître plus de deux fois le même couple Magasin-Article car c'est inutile, c'est-à-dire, voilà ce qu'on doit avoir en résultat sur Sheet2:

Magasin Article
150 BMW M3
150 RS3 AUDI
200 CLIO3

Car il n'y a aucune ligne avec l'année 2018 sur ces couples Magasin-Article.


Je vous remercie énormément de votre compréhension.
 
re,
j'ai mis l'année pour justement savoir quelles sont les années gardées, et on le vérifie ainsi..

ceci dit le TCD fait ce que tu demandes et sans macro !

Une macro est utile s'il y des milliers ou dizaines de milliers (voire plus) de lignes 🙂

P.
 
Bonsoir à tous, 🙂

à tester :
VB:
Option Explicit
Sub test()
Dim a, i As Long, txt As String, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    a = Sheets(1).Range("a1").CurrentRegion.Value
    For i = 2 To UBound(a, 1)
        If a(i, 3) <> 2018 Then
            txt = Join$(Array(a(i, 1), a(i, 2)), Chr(2))
            dico(txt) = VBA.Array(a(i, 1), a(i, 2))
        End If
    Next
    For i = 2 To UBound(a, 1)
        If a(i, 3) = 2018 Then
            txt = Join$(Array(a(i, 1), a(i, 2)), Chr(2))
            If dico.exists(txt) Then
                dico.Remove txt
            End If
        End If
    Next
    With Sheets(2).Range("a1").Resize(, 2)
        .CurrentRegion.Clear
        If dico.Count > 0 Then
            .Value = Array("Magasin", "Article")
            With .Offset(1).Resize(dico.Count)
                .Value = Application.Transpose(Application.Transpose(dico.items))
            End With
        End If
    End With
    Set dico = Nothing
End Sub
klin89
 
Dernière édition:
Bonjour,

Merci à toi Klin89 ça fonctionne niquel, mais il reste un tout petit soucis, lorsque j'ai une référence "0083" par exemple, quand j'exécute la macro, ça se transforme en format nombre, donc on obtient "83", possible de conserver "0083" ? je souhaite absolument conserver le format tel qu'il a été.

Fichier :
 

Pièces jointes

- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…