Exclusion de valeur selon condition dans une combobox en cascade

Galaktus

XLDnaute Nouveau
Bien le bonsoir le forum

Je viens à vous avec une nouvelle question, je travaille sur un projet qui a bien avancé (grâce à un coup de pouce de certains membre de ce super forum),
Il est presque finalisé cependant je bloque sur un dernier problème que je vais essayer d'expliquer :

Je me sers de ce fichier excel pour faire un inventaire et un suivi d'un ensemble d'outillages pour l'industrie
Dans le premier onglet ("Relevé") se trouve 3 combobox en cascade pour affiner le renseignement selon le type d'opération, le type de montage et la référence de montage
J'ai codé ces combobox selon une très bonne méthode trouvé de par le net et j'alimente les combobox avec des plages de cellules nommés dans mon fichier
Pour la combobox de gauche et du milieu ("Operation") et ("Type_de_montage) je me sers des plages de données contenu dans l'onglet ("Données montage"), la dernière, celle de droite ("Reference_de_montage") est alimenté avec les plages de cellules nommés contenu dans la colonne "B" de l'onglet ("Inventaire montages"), ces plages de cellules sont nommés d'après les valeurs sélectionnable dans la deuxième combobox ("Type_de_montage")

Ma question (enfin) : dans l'onglet ("Inventaire montage") je suis susceptible de passer des valeurs de la colonne "B" en rouge (par ex) pour les montages HS, c'est valeurs qui sont en rouge j'aimerais qu'elles soient exclus de la combobox concerné (donc "Reference_de_montage")

On m'a montré comment utilisé la fonction "AddItem" pour exclure des valeurs d'une liste déroulante, cependant je n'arrive pas à l'associer au code qui me permet de remplir la combobox ("Reference_de_montage")

Ci-joint je poste le fichier avec les données confidentielles effacés

Merci d'avance à ceux qui se pencheront sur mon cas et bonne soirée à tous
 

Pièces jointes

  • Fichier test.xlsm
    56.4 KB · Affichages: 57
Dernière édition:

thebenoit59

XLDnaute Accro
Bonjour Galaktus.

A tester

VB:
Private Sub Type_de_montage_Change()
Dim temp(), k, n%
   
    If Sheets("Relevé").Operation.Value = "" Then Sheets("Relevé").Type_de_montage.Clear
   
    'Si combobox "Operation" vide alors arrêt de l'éxecution de la macro
    If Sheets("Relevé").Type_de_montage.Value = "" Then Exit Sub

    'Réinitialiser la combobox "Type_de_montage"
    Sheets("Relevé").Reference_de_montage.Clear

    'Définition variable "NomRange"
    Dim NomRange As String
    NomRange = Sheets("Relevé").Type_de_montage.Value
         
    If NomDefini(NomRange) Then
   
    '***' Intervenir ici.
    '***' Boucler les valeurs de la liste selon la couleur.
    For Each k In Sheets("Inventaire montages").Range(NomRange)
        If Not k.Font.Color = 255 Then
            n = n + 1
            ReDim Preserve temp(1 To n)
            temp(n) = k.Value
        End If
    Next k
   
    Sheets("Relevé").Reference_de_montage.List = Application.Transpose(temp())
   
    'Sheets("Relevé").Reference_de_montage.List = Application.Transpose(Sheets("Inventaire montages").Range(NomRange))

    'Transfert de la valeur de la combobox "Type_de_montage" dans la cellule "E2" de l'onglet "Données montage"
    Worksheets("Données montage").Range("E2").Value = Sheets("Relevé").Type_de_montage.Value

    End If

End Sub
 

Galaktus

XLDnaute Nouveau
Bonsoir Benoit, désolé pour la réponse tardive beaucoup de boulot et pas trop le temps de me connecter.
J'ai testé ta macro et elle fonctionne à merveille :) merci beaucoup tu assures
En fait tu pourrais m'expliquer comment tu as procéder avec la partie variable n ? J'avoue que je ne comprend pas tout

Bonne soirée à toi et joyeuses fêtes si je ne te relis plus d'ici la :)
 

thebenoit59

XLDnaute Accro
Bonjour Galaktus.

VB:
'***' Intervenir ici.
   '***' Boucler les valeurs de la liste selon la couleur.
   'Boucle de chaque élément de la zone.
   For Each k In Sheets("Inventaire montages").Range(NomRange)
        'Si la police d'écriture est 255 (rouge) alors.
       If Not k.Font.Color = 255 Then
            'On incrémente n de 1, de base n = 0.
            n = n + 1
           'Je redimensionne, en conservant les données du tableau, de 1 à n
           'A la première occurrence, nous aurons un tableau d'une ligne, puis deux etc ..
           ReDim Preserve temp(1 To n)
           'A la ligne n j'enregistre la valeur de k dans le tableau.
            temp(n) = k.Value
       End If
   Next k

Je suis parti sur une variable tableau, j'aurai pu utiliser un dictionnaire également (le résultat est le même, sauf qu'avec le tableau il peut y avoir des doublons).
 

Galaktus

XLDnaute Nouveau
Merci pour ta réponse rapide et pour tes explications, je débute encore et j'ai encore un peu de mal avec les variables
en tout cas je te remercie je vais étudier ton code avec attention, je te souhaite de passer de bonne fêtes et bonne continuation :)
 

Discussions similaires

Réponses
28
Affichages
1 K

Statistiques des forums

Discussions
312 193
Messages
2 086 061
Membres
103 110
dernier inscrit
Privé