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 :

Problème de codage pour liste cascade intuitive à 2 entrées


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Boucher-charcutier indépendant
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Boucher-charcutier indépendant
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Par défaut Problème de codage pour liste cascade intuitive à 2 entrées
    Bonjour à tous,

    Je me suis permis de télécharger le fichier "Liste cascade intuitive département/Ville" sur le site Internet http://boisgontierjacques.free.fr/. Sur la base de celui-ci, je voulais créer un fichier de saisie des données pour des marchandises. Je m'explique :
    - dans une feuille "ListeIntuitive", je possède une base de données comportant 2 colonnes : colonne 1, dont l'entête se nomme "Marchandise", regroupe les différentes marchandises proposées par les fournisseurs. Il y a des doublons car des marchandises identiques sont distribuées par différents fournisseurs. J'ai défini le nom "marchandise" à la liste des marchandises (sans l'intitulé de la colonne). La colonne 2, dont l'entête se nomme "Fournisseur" regroupe les noms des fournisseurs (nom de la plage, sans l'intitulé de la colonne = "fournisseur)
    - dans une autre feuille, "SaisieMarchandise", je saisis mes données en indiquant en premier le nom du fournisseur, dans la cellule C6 et ensuite je choisis la marchandise dans la cellule D6. j'utilise qu'une seule ligne de saisie.
    LE PROBLEME : la première liste déroulante fonctionne, mais ensuite je ne retrouve aucun enregistrement dans la deuxième liste déroulante contenant les marchandise. J'ai modifié le code VBA comme ci-dessous :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Dim TblFournisseur(), TblMarchandise(), fournisseur(), marchandise()
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Not Intersect([c6:c6], Target) Is Nothing And Target.Count = 1 Then
        fournisseur = Application.Transpose(Sheets("ListeIntuitive").Range("fournisseur").Value)
        Set d1 = CreateObject("Scripting.Dictionary")
        For Each c In fournisseur
         If c <> "" Then d1(c) = ""
        Next c
        TblFournisseur = d1.keys
        Me.ComboBox1.List = d1.keys
        Me.ComboBox1.Height = Target.Height + 3
        Me.ComboBox1.Width = Target.Width
        Me.ComboBox1.Top = Target.Top
        Me.ComboBox1.Left = Target.Left
        Me.ComboBox1 = Target
        Me.ComboBox1.Visible = True
        Me.ComboBox1.Activate
      Else
        Me.ComboBox1.Visible = False
      End If
      '----
      If Not Intersect([d6:d6], Target) Is Nothing And Target.Count = 1 Then
        Condition = UCase(Target.Offset(, -1))
        If Condition = "" Then Exit Sub
        marchandise = Application.Transpose(Sheets("ListeIntuitive").Range("marchandise").Value)
        fournisseur = Application.Transpose(Sheets("ListeIntuitive").Range("fournisseur").Value)
        ReDim TblMarchandise(1 To UBound(fournisseur))
        Set d1 = CreateObject("Scripting.Dictionary")
        For i = LBound(marchandise) To UBound(marchandise)
          If fournisseur(i) = Condition Then d1(marchandise(i)) = ""
        Next i
        TblMarchandise = d1.keys
        Me.ComboBox2.List = TblMarchandise
        Me.ComboBox2.Height = Target.Height + 3
        Me.ComboBox2.Width = Target.Width
        Me.ComboBox2.Top = Target.Top
        Me.ComboBox2.Left = Target.Left
        Me.ComboBox2 = Target
        Me.ComboBox2.Visible = True
        Me.ComboBox2.Activate
        'Me.ComboBox2.DropDown    ' ouverture automatique au clic dans la cellule (optionel)
      Else
        Me.ComboBox2.Visible = False
      End If
    End Sub
    Private Sub ComboBox1_Change()
     If Me.ComboBox1 <> "" And IsError(Application.Match(Me.ComboBox1, fournisseur, 0)) Then
       Set d1 = CreateObject("Scripting.Dictionary")
       tmp = UCase(Me.ComboBox1) & "*"
       For Each c In TblFournisseur
         If UCase(c) Like tmp Then d1(c) = ""
       Next c
       Me.ComboBox1.List = d1.keys
       Me.ComboBox1.DropDown
      End If
      ActiveCell.Value = Me.ComboBox1 ': ActiveCell.Offset(, 1) = "": ActiveCell.Offset(, 2) = ""
    End Sub
    Private Sub ComboBox2_Change()
     If Me.ComboBox2 <> "" And IsError(Application.Match(Me.ComboBox2, marchandise, 0)) Then
       Set d1 = CreateObject("Scripting.Dictionary")
       tmp = UCase(Me.ComboBox2) & "*"
       For Each c In TblMarchandise
         If UCase(c) Like tmp Then d1(c) = ""
       Next c
       Me.ComboBox2.List = d1.keys
       Me.ComboBox2.DropDown
     End If
       ActiveCell.Value = Me.ComboBox2
    End Sub
     
    Private Sub ComboBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
      Me.ComboBox2.List = TblMarchandise
      Me.ComboBox2.Activate
      Me.ComboBox2.DropDown
    End Sub
    Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
      Me.ComboBox1.List = TblFournisseur
      Me.ComboBox1.Activate
      Me.ComboBox1.DropDown
    End Sub
     
    Private Sub ComboBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
     ' If KeyCode = 13 Then ActiveCell.Offset(1).Select
    End Sub
    Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
     ' If KeyCode = 13 Then ActiveCell.Offset(, 1).Select
    End Sub
    ...mais je reste bloqué et là je ne trouve pas de solution. J'ai pourtant essayer de prendre le fichier de base et de coller mes valeurs dans la base de données mais ça ne fonctionne toujours pas.
    Auriez-vous une solution pour moi ?

    Merci d'avance pour vos aides

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 418
    Par défaut
    Bonjour,
    Je ne vois pas d'où pourrait provenir l'erreur.
    Peut-être une simple faute de frappe au niveau du nom de la plage "marchandise".
    Sinon, pourquoi ne pas conserver les noms et codes tels que donnés par Boisgontier (pour ensuite les modifier 1 à 1 si vraiment nécessaire).
    Cdt.

Discussions similaires

  1. Problème de VBA pour une liste déroulante en cascade
    Par Alex GOL dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/01/2018, 07h09
  2. [AC-2010] Problème de code pour éliminer les champs vide entre 2 tables
    Par kinine dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/01/2013, 20h16
  3. Réponses: 3
    Dernier message: 15/01/2013, 11h18
  4. Problème pour liste répertoires/fichiers
    Par pymouse dans le forum C
    Réponses: 1
    Dernier message: 15/12/2006, 11h45
  5. Réponses: 2
    Dernier message: 20/09/2006, 14h38

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