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 régulier
    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
    Points : 124
    Points
    124
    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 sénior 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
    Points : 31 877
    Points
    31 877
    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 régulier
    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
    Points : 124
    Points
    124
    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 sénior 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
    Points : 31 877
    Points
    31 877
    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 régulier
    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
    Points : 124
    Points
    124
    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 sénior 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
    Points : 31 877
    Points
    31 877
    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 régulier
    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
    Points : 124
    Points
    124
    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 sénior 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
    Points : 31 877
    Points
    31 877
    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 régulier
    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
    Points : 124
    Points
    124
    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