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 :

Ajout liste déroulantes sans doublons [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut Ajout liste déroulantes sans doublons
    Bonjour à tous,

    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
    Sub recupNumCmdTtt()
    Dim i As Integer
    Dim j As Byte
    Dim NomCol As String
     
    Set wbkAnalyse = ThisWorkbook
    Set shAnalyse = wbkAnalyse.Sheets("contrôle arrivage-final")
     
    On Error GoTo errorValidation
    'On efface au préalable les combobox pour ne pas avoir de doublons
    With shAnalyse
        For j = 14 To 18
            NomCol = Left(.Cells(1, j).Address(0, 0), 1)
            '.OLEObjects("cb" & NomCol & "40").Object.Clear
    'On parcourt la ligne 37 et quand une cellule contient un numéro de commande on l'ajoute dans la combobox...
            For i = cNumColonneDebutTableau To cNumColonneFinTableau
                If Cells(37, i).Value <> "" Then .OLEObjects("cb" & NomCol & "40").Object.AddItem .Cells(cNumLigneCmdTraitement, i)
            Next i
        Next j
    End With
    End Sub
    Cette procédure me permet de parcourir ma ligne 37 et de récupérer les numéros qui y figurent afin de remplir mes combo box.
    Cependant j'ai mis la ligne .Clear en commentaire. Parce que à chaque fois que j'utilise une nouvelle combo box cela me met ma précédente à vide.

    Cependant, si je ne met pas cette ligne j'ai pleins de doublons dans mes combo box.

    Connaissez vous un moyen pour optimiser cette procédure de façon à ce qu'elle m'ajoute les numéros mais sans doublons? Ou toute autre solution susceptible de m'aider s'ils vous plait

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    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
    Sub recupNumCmdTtt()
    Dim i As Integer, Indx As Integer
    Dim j As Byte
    Dim NomCol As String
     
    Set wbkAnalyse = ThisWorkbook
    Set shAnalyse = wbkAnalyse.Sheets("contrôle arrivage-final")
     
    With shAnalyse
        For j = 14 To 18
            NomCol = Left(.Cells(1, j).Address(0, 0), 1)
            Indx = .OLEObjects("cb" & NomCol & "40").Object.ListIndex
            For i = cNumColonneDebutTableau To cNumColonneFinTableau
                If .Cells(37, i).Value <> "" Then
                    .OLEObjects("cb" & NomCol & "40").Object.Value = .Cells(cNumLigneCmdTraitement, i)
                    If .OLEObjects("cb" & NomCol & "40").Object.ListIndex = -1 Then .OLEObjects("cb" & NomCol & "40").Object.AddItem .Cells(cNumLigneCmdTraitement, i)
                End If
            Next i
            .OLEObjects("cb" & NomCol & "40").Object.ListIndex = Indx
        Next j
    End With
    End Sub

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Merci mercatog ça fonctionne.
    Cependant si un numéro est supprimé cela me le garde quand même dans la zone de liste déroulante vu qu'il n'y a plus le .Clear ...

    Comment puis-je faire??

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Je ne comprends plus. ton code initial avec le clear efface ta combo et la remplit des nouvelles valeurs. ou je n'ai pas saisi quelque chose?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    En fait j'appelle mon code à chaque fois que il y a une modification dans les cellules où on peut rentrer un numéro ... et à chaque fois ça modifie en fait

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Explications incomplètes et en abrégé du problème. Tu aurais des pistes valables si tu fais l'effort d'expliquer clairement.
    ça veut dire quoi ce passage?
    Parce que à chaque fois que j'utilise une nouvelle combo box cela me met ma précédente à vide.
    Où est appelée ta Sub recupNumCmdTtt?
    ...etc

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    recupNumCmdTtt est appelé là :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Col As String
     
    Set wbkAnalyse = ThisWorkbook
    Set shAnalyse = wbkAnalyse.Sheets("contrôle arrivage-final")
     
    Col = Left(Target.Address(0, 0), 1)
     
    Call recupNumCmdTtt
     
    If InStr("N39_O39_P39_Q39_R39", Target.Address(0, 0)) > 0 Then
        ActiveSheet.OLEObjects("cb" & Col & "40").Visible = Target.Value = "Sieving"
        If Target.Value = "" Then
            ActiveSheet.OLEObjects("cb" & Col & "40").Object.Value = ""
        End If
    End If
     
    'If InStr("G37_J37_M37_N37_O37_P37_Q37_R37", Target.Address(0, 0)) > 0 Then
    '    If Target.Value <> "" Then
    '        cbN40.AddItem Target.Value
    '        cbO40.AddItem Target.Value
    '        cbP40.AddItem Target.Value
    '        cbQ40.AddItem Target.Value
    '        cbR40.AddItem Target.Value
    '    End If
    'End If
     
    End Sub

    Et bien si je saisi une valeur dans ma première combobox, que je passe à une autre combobox la combobox saisie précédemment se met à vide, pour le cas où dans mon code je le met à .Clear.
    Mais ce n'est pas grave j'ai demandé à mon maitre de stage ce n'est pas important si ma liste ne se met pas à jour tout de suite en cas de suppression de numéro... Tant qu'elles le font une fois qu'on réouvre le fichier Excel

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    On re rempli seulement la combobox correspondant à la colonne de la cellule de la ligne 37 a été changée. la colonne est entrée en paramètre
    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
    Sub recupNumCmdTtt(ByVal NomCol As String)
    Dim i As Integer
     
    Set wbkAnalyse = ThisWorkbook
    Set shAnalyse = wbkAnalyse.Sheets("contrôle arrivage-final")
     
    With shAnalyse
        For i = cNumColonneDebutTableau To cNumColonneFinTableau
            If .Cells(37, i).Value <> "" Then
                .OLEObjects("cb" & NomCol & "40").Object.Value = .Cells(cNumLigneCmdTraitement, i)
                If .OLEObjects("cb" & NomCol & "40").Object.ListIndex = -1 Then .OLEObjects("cb" & NomCol & "40").Object.AddItem .Cells(cNumLigneCmdTraitement, i)
            End If
        Next i
    End With
    End Sub
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Col As String
     
    Set wbkAnalyse = ThisWorkbook
    Set shAnalyse = wbkAnalyse.Sheets("contrôle arrivage-final")
     
    If InStr("N39_O39_P39_Q39_R39", Target.Address(0, 0)) > 0 Then
        Col = Left(Target.Address(0, 0), 1)
     
        Call recupNumCmdTtt(Col)
        ActiveSheet.OLEObjects("cb" & Col & "40").Visible = Target.Value = "Sieving"
        If Target.Value = "" Then
            ActiveSheet.OLEObjects("cb" & Col & "40").Object.Value = ""
        End If
    End If
     
    'If InStr("G37_J37_M37_N37_O37_P37_Q37_R37", Target.Address(0, 0)) > 0 Then
    '    If Target.Value <> "" Then
    '        cbN40.AddItem Target.Value
    '        cbO40.AddItem Target.Value
    '        cbP40.AddItem Target.Value
    '        cbQ40.AddItem Target.Value
    '        cbR40.AddItem Target.Value
    '    End If
    'End If
     
    End Sub

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Ok merci !!

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

Discussions similaires

  1. [E-03] - Liste déroulante sans doublons
    Par damsmut dans le forum Excel
    Réponses: 15
    Dernier message: 18/02/2008, 18h28
  2. [SQL] liste déroulante sans doublons
    Par crashdown31 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/06/2007, 20h48
  3. Formulaire : liste déroulante sans doublon
    Par schdam dans le forum Modélisation
    Réponses: 2
    Dernier message: 17/06/2007, 18h21
  4. [Formulaire]liste déroulante sans doublon
    Par kovrov dans le forum IHM
    Réponses: 15
    Dernier message: 01/04/2007, 20h09
  5. [Formulaire]Liste déroulante sans doublons
    Par frevale dans le forum IHM
    Réponses: 2
    Dernier message: 22/03/2007, 21h54

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