IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Scripting.Dictionary sur une seule ligne et plusieurs colonnes? [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Comptable / Contrôleur de Gestion
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable / Contrôleur de Gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut Scripting.Dictionary sur une seule ligne et plusieurs colonnes?
    Bonsoir à toutes et à tous

    J'ai 4 combobox en cascade, toutes définies en Scripting.Dictionary sur des colonnes. Ma cinquième combobox doit, en revanche, pour des soucis de lisibilité de ma base, prendre ses données sur 7 colonnes différentes.

    Pour vous éclairer un peu, il s'agit de faciliter mes reportings, je travaille pour une société dans l'industrie de l'habillement. Donc cette cinquième combobox doit reprendre les tailles disponibles en fonction de la saison (première combobox) de l'article (deuxième combobox), de la matière de l'article (troisième combobox), et du coloris (quatrième combobox). Jusque là je n'ai rencontré aucun problème, mais à la cinquième je pèche carrément depuis une bonne journée... Je vous joins mon fichier (certaines choses sont à optimiser, notamment l'ordre des textbox et combobox qui font un peu galérer avec la touche tabulation, donc SVP, pas de commentaires dessus, j'y travaillerai c'est prévu XD ).

    Voici le code de la combobox qui me pose problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Sub Coloris_change()
     
    Set ws = Sheets("COMMANDES LIVREES MAGASIN")
    Set MonDico5 = CreateObject("Scripting.dictionary")
     
    With ws
     
    Me.Retail_Price = ""
     
    For j = 2 To .Range("A" & Rows.Count).End(xlUp).Row
     
        If Me.Saison = .Range("A" & j) And Me.Article = .Range("B" & j) And Me.Matiere = .Range("C" & j) And Me.Coloris = .Range("D" & j) Then
            Me.Retail_Price = Format(CDbl(.Range("O" & j)), "### ### ##0.00 €")
            MonDico5(.Range(Cells(1, 7), Cells(1, 13)).Value) = "" 'Erreur d'exécution 5: Argument ou appel de procédure incorrect
            Me.Taille.List = Application.Transpose(MonDico5.Keys)
        End If
     
    Next j
     
    End With
     
    End Sub
    J'ai pensé à créer la même base sur deux feuilles séparées pour l'avoir sous deux formes différentes pour pouvoir faire mon code sur une colonne et non pas plusieurs mais ça ne m'arrange pas vraiment vu que j'ai environ plus de 4500 références au total. J'ai également pensé à un vlookup que je pourrais donc utiliser sur ma colonne " REF.BIS " mais je vois pas trop comment tourner cette formule pour l'intégrer dans ma combobox. J'ai également pensé à quelque chose comme ça:

    If Me.Saison = [...]
    Me.Retail_Price = [...]
    For ji = 7 to 13
    MonDico5(.Range(ji & 1).Value) = ""
    [...]
    End If

    Mais ça ne fonctionne pas non plus :'(

    Donc si l'une ou l'un d'entre vous a une idée de génie, je suis preneur

    Merci à toutes et à tous par avance pour le temps que me consacrerez ^^
    Bien évidemment je répondrai à toutes les réponses, si la solution fonctionne ou pas

    Wladounet

    P.S: Désolé si je n'ai pas bien utilisé la balise de code Oo'
    P.S2 : Si vous avez des idées pour optimiser mon code, je suis preneur également, je ne suis pas expert en VBA, j'en apprendrai davantage ainsi
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je n'ai pas ouvert ton classeur. Vois ce qu'en dit ma signature.
    Que vient faire dans cette affaire l'utilisation d'un objet dictionary ?
    C'est pour faire plus "pro" ? (et plus lourd ?)
    Etablis la liste de ta listbox directement par transposition de ta plage.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ListBox1.Clear
      With Worksheets(" .....")
        ListBox1.List() = WorksheetFunction.Transpose(.Range(.Cells(2, 3), .Cells(2, 7)))
      End With
    ps : sans préjudice du reste qui est assez surprenant (établir en boucle toujours la même liste de la listbox).

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Comptable / Contrôleur de Gestion
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable / Contrôleur de Gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut
    Bonsoir, et merci pour ta réponse.

    Aucun soucis, je peux comprendre.

    Non ce n'est pas pour faire plus "pro" ou plus "lourd".
    Ta solution ne me satisfait qu'à moitié, j'ai bien les tailles qui apparaissent, mais le problème est qu'elles apparaissent toutes, or le principe était justement de faire en sorte que seules les tailles disponibles pour l'article en question soient sélectionnables dans ma combobox
    Néanmoins je pense que ça pourrait me servir, merci.

    Pour répondre au PS, la boucle sert à vérifier le If, pour limiter le choix de saisie, comme dit dans mon message, j'ai environ 4500 références, je vois mal l'utilisateur passer son temps à chercher des références, matières, couleurs, à ce moment là, autant ne rien faire du tout et le laisser saisir directement dans le classeur et donc multiplier le risque d'erreur. C'est un peu comme une définition de condition : si article = jupe1 alors matière = satin ou coton mais matière ne peut pas être laine, et si article = jupe1 et que matière = coton alors couleur = noir ou rouge, mais pas bleu (qui pourrait être disponible en satin) et si couleur = noir alors taille = 34 ou 38 mais pas 40 qui pourrait être disponible en rouge.
    C'est pour cette raison que j'avais pensé à faire deux feuilles contenant la même base de données, une dont se servirait le code vba, et l'autre pour la lisibilité de l'information.

    Après je me plante peut-être complètement.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    mais le problème est qu'elles apparaissent toutes, or le principe était justement de faire en sorte que seules les tailles disponibles pour l'article en question soient sélectionnables dans ma combobox
    mais cet aspect-là est autre et n'a rien à voir avec l'utilisation d'un dictionnaire et tout à voir avec le code que tu as écrit qui (relire mon PS), lui, ne sélectionne rien ... d'autre que toujours la même plage.
    Bonne nuit.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Comptable / Contrôleur de Gestion
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable / Contrôleur de Gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut
    Citation Envoyé par unparia Voir le message
    mais cet aspect-là est autre et n'a rien à voir avec l'utilisation d'un dictionnaire et tout à voir avec le code que tu as écrit qui (relire mon PS), lui, ne sélectionne rien ... d'autre que toujours la même plage.
    Bonne nuit.
    Si j'enlève ma boucle, impossible de se référer aux combobox précédentes donc j'ai toutes les tailles qui ressortent quand même. Je viens de tester.

    Bonne nuit également

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    comme ceci peut-être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Taille.Clear
    For j = 2 To ws.Range("A" & Rows.Count).End(xlUp).Row
     
        If Me.Saison = ws.Range("A" & j) And Me.Article = ws.Range("B" & j) And Me.Matiere = ws.Range("C" & j) And Me.Coloris = ws.Range("D" & j) Then
            Me.Retail_Price = Format(CDbl(ws.Range("O" & j)), "### ### ##0.00 €")
            For i = 7 To 13
                If Cells(j, i) > 0 Then Taille.AddItem Cells(1, i)
            Next i
        End If
    Next j
    Cdlt

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Comptable / Contrôleur de Gestion
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable / Contrôleur de Gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut
    Re-Bonsoir,


    Alors c'est vraiment très moche, mais voilà ce à quoi je viens de penser qui fait à peu près ce que je souhaitais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Private Sub Coloris_change()
     
    Set ws = Sheets("COMMANDES LIVREES MAGASIN")
    Dim h As String
    Dim b As String
    Dim c As String
    Dim d As String
    Dim e As String
    Dim f As String
    Dim g As String
     
    With ws
     
    For j = 2 To .Range("A" & Rows.Count).End(xlUp).Row
     
        If Me.Saison = ws.Range("A" & j) And Me.Article = ws.Range("B" & j) And Me.Matiere = ws.Range("C" & j) And Me.Coloris = ws.Range("D" & j) Then
            Me.Retail_Price = Format(CDbl(ws.Range("O" & j)), "### ### ##0.00 €")
     
            If .Cells(j, 7) > 0 Then
                h = "34"
            End If
            If .Cells(j, 8).Value > 0 Then
                b = "36"
            End If
            If .Cells(j, 9) > 0 Then
                c = "38"
            End If
            If .Cells(j, 10) > 0 Then
                d = "40"
            End If
            If .Cells(j, 11) > 0 Then
                e = "42"
            End If
            If .Cells(j, 12) > 0 Then
                f = "44"
            End If
            If .Cells(j, 13) > 0 Then
                g = "TU"
            End If
     
            Me.Taille.List = Array(h, b, c, d, e, f, g)
     
        End If
     
    Next j
     
    End With
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Export sur une seule ligne de plusieurs tables
    Par xian21 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/06/2008, 17h11
  2. Afficher plusieurs tableaux sur une seule ligne
    Par kromartien dans le forum Mise en forme
    Réponses: 3
    Dernier message: 18/11/2007, 15h12
  3. Plusieurs résultats sur une seule ligne
    Par Morphorpse dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/08/2007, 19h36
  4. Réponses: 7
    Dernier message: 08/03/2007, 13h05
  5. Plusieures infos sur une seule ligne avec ou sans tableau
    Par Him dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/03/2006, 14h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo