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 :

Réalisation combobox - RechercheV en VBA [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Par défaut Réalisation combobox - RechercheV en VBA
    Bonjour à tous,

    Je dispose d'un code VBA permettant de remplir des combobox.
    Cependant, mon code permet uniquement de rajouter plusieurs fois la même ligne, je me retrouve avec plusieurs lignes identiques car j'effectue un test sur une variable contenant une donnée précise : exemple : "Toaster 1"
    Dans ma base à la colonne A, j'ai plusieurs fois "Toaster 1", et il me prend la première ligne, il faudrait que je trouve le moyen d'incrémenter ...

    Je ne sais pas si je me fais bien comprendre... voici mon code :

    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
    Private Sub UserForm_Initialize()
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    Menu.Label1.Caption = y
    
    Sheets("Reglages").Select
    
    ' //Combobox 1
        Dim l1 As Long 'déclare la variable lf (Ligne de Fin)
        Dim x As Variant
        l1 = Range("A65536").End(xlUp).Row 'définit la variable l1
        Menu.ComboBox1.Clear 'vide la ComboBox
        'remplit la ComboBox
        For Each cel In Range("A2:A" & l1) 'boucle sur toutes les cellule de A1 à A_lf
        x = Application.WorksheetFunction.VLookup(cel, Sheets("Reglages").Range("A2:E" & l1), 2, False) 
        'condition : si la cellule n'est pas vide ajoute son contenu à la ComboBox
        If cel.Value = y Then Menu.ComboBox1.AddItem x
        Next cel 'prochaine cellule
    Merci d'avance pour votre aide.

    GK

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Peut-être en essayant comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        For Each cel In Range("A2:A" & l1) 'boucle sur toutes les cellule de A1 à A_lf
        'condition : si la cellule = le Label = y, ajoute son contenu à la ComboBox  
        If cel.Value = y Then 
            x = Application.WorksheetFunction.VLookup(cel, Sheets("Reglages").Range("A2:E" & l1), 2, False) 
            Menu.ComboBox1 = x  'affecte la valeur au combobox
            'Si ListIndex = -1, la valeur n'a pas été trouvée et on l'ajoute
            If Menu.ComboBox1.ListIndex = -1 then  Menu.ComboBox1.AddItem x
        End If
        Next cel 'prochaine cellule

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Par défaut
    --> j'obtiens cette erreur :"La méthode 'Range' de l'objet '_Global' à échoué"

    pour information, voici ma base de données sur laquelle pointe ces informations :
    Col A		Col B			Col C
    Equipements	Menu déroulant 1	Menu déroulant 2
    Toaster 1	Maintenance	
    Toaster 1	Panne	
    Toaster 1	Entretien		Lames
    Toaster 1	Entretien		Buses
    Toaster 1	Entretien		Filtre
    Toaster 1	Entretien		Filtre
    Toaster 1	Entretien		Filtre
    Toaster 1	Entretien		Détecteur de métaux
    Toaster 1	Entretien		Trieur Optique
    Toaster 1	Entretien		Trieur Optique
    Toaster 1	Entretien		Trieur Optique
    Toaster 1	Entretien		Trieur Optique
    Toaster 1	Entretien		Trieur Optique

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Si tu veux récupérer les valeur situées en colonne B en face de la valeur cherchée en colonne A, teste avec Find :
    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
     
    Private Sub UserForm_Initialize()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Adr As String
     
        'y est quoi, Une variable déclarée en tête de module et initialisée ailleurs ?
        'c'est bien la valeur recherchée ?
        Menu.Label1.Caption = y
     
        'vide le ComboBox
        Menu.ComboBox1.Clear
     
        'défini la plage de recherche en colonne A de la feuille "Reglages"
        With Worksheets("Reglages")
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
        'lance la recherche
        Set Cel = Plage.Find(y, , xlValues, xlWhole)
     
        'si trouvé...
        If Not Cel Is Nothing Then
     
            mémorise l 'adresse pour l'arrêt du bouclage
            Adr = Cel.Adr
     
            Do
     
                'ajoute la valeur située en colonne B dans le ComboBox
                Menu.ComboBox1.AddItem Cel.Offset(, 1).Value
     
                'continu la recherche
                Set Cel = Plage.FindNext(Cel)
     
            's'arrête quand on se retrouve au début
            Loop While Adr <> Cel.Adr
     
        End If
     
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Par défaut
    La variable y est bien initialisé ailleurs dans mon document, j'ai fais un msgbox, elle porte la valeur "Toaster 1", donc c'est bien la valeur recherchée.

    J'ai bien mis en place ton code, lors de l'apparition de l'userform, j'ai une erreur : "Propriété ou méthode non gérée" sur la ligne "Menu.show".

    Je vais continuer à chercher, je ne comprend pas d'où vient ce problème.

    Je vous tiens au courant.

    GK

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    --> j'obtiens cette erreur :"La méthode 'Range' de l'objet '_Global' à échoué"
    Sur quelle ligne survient l'erreur ?

    Se pourrait-il que x retourne une erreur lors du VLookUp ? Genre #N/A ?
    Si oui, il faudrait peut-être vérifier avec IsError(x)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            x = Application.WorksheetFunction.VLookup(cel, Sheets("Reglages").Range("A2:E" & l1), 2, False) 
            If Not IsError(x) then
                Menu.ComboBox1 = x  'affecte la valeur au combobox
                'Si ListIndex = -1, la valeur n'a pas été trouvée et on l'ajoute
                If Menu.ComboBox1.ListIndex = -1 then  Menu.ComboBox1.AddItem x
            End If

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

Discussions similaires

  1. [TEST] Réaliser un plan de test complet
    Par cladsam dans le forum Test
    Réponses: 16
    Dernier message: 23/11/2017, 21h54
  2. réaliser un test dont l'indicateur de comparaison dépend d'un combobox
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/04/2009, 16h03
  3. réaliser un test avec php
    Par souad23 dans le forum Langage
    Réponses: 1
    Dernier message: 14/06/2007, 17h43
  4. réaliser des tests
    Par gentil dans le forum Struts 1
    Réponses: 4
    Dernier message: 31/03/2007, 13h35
  5. Que fais t-on qd on "réalise des tests" ?
    Par hélios44 dans le forum Emploi
    Réponses: 20
    Dernier message: 26/01/2007, 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