Liste de validation avec une condition

lepigoennier

XLDnaute Junior
Bonjour à tous,

Voici le probleme:

J'ai 3 listes d'items sur différentes feuilles avec le # d'acheteur correspondant (ne sont pas classé par ordre et peut varier d'une journée à l'autre), 1 liste par division. Sur la feuille Acheteur, je voudrais qu'à la sélection de la division (PLB, STE et SFDL) et du # d'acheteur, ma liste de validation (feuille acheteur A12) ne prennent en compte que les items correspondant à l'acheteur pour cette division.

Voir document pour plus de clarté

Merci
 

Pièces jointes

  • RFQ.xlsm
    74.8 KB · Affichages: 43

Modeste

XLDnaute Barbatruc
Re : Liste de validation avec une condition

Bonsoir lepigeonnier,

Ce qu'il faudrait que tu nous dises c'est où seront stockées les infos relatives à:
- quelle case est cochée
- quel agent est sélectionné dans la liste

Sur base de ces deux infos, on pourra "garnir" une plage nommée (dans ta feuille "Menus déroulants", par exemple?), laquelle servira de source à ta Validation ...si j'ai bien compris!?
 

lepigoennier

XLDnaute Junior
Re : Liste de validation avec une condition

Menu Déroulant pour les acheteurs cell link = Acheteur B6
Bouton option STE cell link = Acheteur C1
Bouton option SFDL cell link = Acheteur C2
Bouton option PLB cell link = Acheteur C3

La liste de validation sera dans les cellules A12@A21 de la feuille Acheteur

Si optionButton STE est sélectionné, les données doivent être colonne B de la feuille STE
Si optionButton SFDL est sélectionné, les données doivent être colonne B de la feuille SFDL
Si optionButton PLB est sélectionné, les données doivent être colonne B de la feuille PLB

Donc comment faire pour aller chercher les informations pour l'acheteur seulement?

Voici le code que j'ai qui me permet d'aller chercher toutes les lignes pour chacun des optionButton :

Code:
Private Sub ComboBox3_Change()

Range("A12:A21").Select
    If Range("C1") = True And Range("A8") = True Then
    With Selection.validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=plageSTE"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
    Else
    
    If Range("C2") = True And Range("A8") = True Then
    With Selection.validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=plageSFDL"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
   Else
   
     If Range("C3") = True And Range("A8") = True Then
     With Selection.validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=plagePLB"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
   
   End If
   End If
   
End Sub
 

Modeste

XLDnaute Barbatruc
Re : Liste de validation avec une condition

Re,

Chez moi, les contrôles ActiveX ne fonctionnent pas toujours ... j'ai donc testé en changeant les valeurs "manuellement" en C1, C2, C3 et B6.
Ajouté, comme indiqué plus tôt une plage nommée "srcValid" dont la macro se charge de gérer le contenu.

Le code est dans le module de la feuille "Acheteur", déclenché par le changement de valeur en B6

... à toi de tester et de vérifier ...
 

Pièces jointes

  • RFQ (lepigeonnier).xlsm
    75.6 KB · Affichages: 64

Si...

XLDnaute Barbatruc
Re : Liste de validation avec une condition

Salut

Modeste :D, à défaut d’accorder nos violons, je t’accorde volontiers raison quant à la dissonance provoquée par les boutons*.
Il y a peu, je répondais, ici, à propos de listes modifiables.
Je persiste, là, en tentant de dompter ces contrôles récalcitrants.

*Avec mon X tra dit varius, j’ai les chevilles, notamment celle de Si…, qui enflent.
 

Pièces jointes

  • Liste de validation Variable.xlsm
    82.9 KB · Affichages: 41

lepigoennier

XLDnaute Junior
Re : Liste de validation avec une condition

J'en suis rendue à ce point là. Maintenant, comment faire pour aller chercher le résultat de la colonne B plutôt que le d'inscrire le # de la ligne? Un gros merci:cool:

Code:
Function RechFind(ByVal Cle As String, ByVal WkbN As String, ByVal WksN As String, ByVal Plage As String, ByRef TBadress() As Variant) As Long
Dim Cherche, Ix As Long, PrAddress
    
    If Range("C1") = True Then
    A = "STE"
    Else
    If Range("C2") = True Then
    A = "SFDL"
    Else
    If Range("C3") = True Then
    A = "PLB"
    Else
    End If
    End If
    End If
    
    
    With Workbooks(WkbN).Sheets(A).Range(Plage)
        Set Cherche = .Find(Cle)
        If Not Cherche Is Nothing Then
            PrAddress = Cherche.Address
            Do
                ReDim Preserve TBadress(Ix)
                TBadress(Ix) = Cherche.Address
                Set Cherche = .FindNext(Cherche)
                Ix = Ix + 1
            Loop While Not Cherche Is Nothing And Cherche.Address <> PrAddress
        End If
    End With
    'nombre d'occurence(s) trouvée(s), Retour 0 si aucune occurence
    RechFind = Ix
    Set Cherche = Nothing 'Libére la mémoire occupée par l'objet.
End Function

Code:
Private Sub ComboBox3_Change()
Dim R As Long, TB()
Dim i As Integer

    If Range("C1") = True Then
    A = "STE"
    Else
    If Range("C2") = True Then
    A = "SFDL"
    Else
    If Range("C3") = True Then
    A = "PLB"
    Else
    End If
    End If
    End If
    
    Sheets("Menus déroulants").Range("A2:A1000").ClearContents
    R = RechFind(Range("C6"), ThisWorkbook.Name, Sheets(A).Name, Range("A2:A1000").Address, TB())
    If R > 0 Then
        For i = 0 To R - 1 ' ou ubound(TB)
            'exemple
            Sheets("Menus déroulants").Cells(i + 2, 1) = Range(TB(i)).Row
        Next i
    End If
End Sub
 

lepigoennier

XLDnaute Junior
Re : Liste de validation avec une condition

Bonjour Modeste,

Finalement, après quelques ajustements, ça fonctionne le fichier que tu m'as envoyé. Par contre, là je tourne en rond (car par très bonne en macro), comment faire pour que ta colonne source_Valid soit dans la colonne A plutôt que F? (J'ai d'autres données dans ces colonnes J'ai changé srcValide en remplaçant F par A mais par la suite :confused::confused::confused:. Je te joins le fichier avec mes modifications

Un gros merci pour ton aide.:D
 

Pièces jointes

  • RFQ%20(lepigeonnier)(1).xlsm
    109.7 KB · Affichages: 34

Modeste

XLDnaute Barbatruc
Re : Liste de validation avec une condition

Bonsoir lepigoennier,

On peut comprendre que, "le nez dans le guidon" tu puisses manquer une info isolée ... mais hier, on aurait dit que tu n'avais rien vu de nos interventions et aujourd'hui, tu continues de faire comme si Si... (non, je ne bégaie pas !) n'avait rien proposé! ou alors c'est demain que tu répondras à son message? :rolleyes:

Dans son fichier, il utilisait un "tableau"; tu aurais eu moins de mal à le déplacer! Sa proposition avait, par ailleurs le mérite de gérer la sélection d'un des OptionButton et de la ComboBox. La mienne était une base à adapter ... à laquelle tu as ajouté un peu de bricolage pour "forcer" la prise en compte d'un événement.

Je te suggère donc 2 choses: jette un oeil attentif au code de Si... (c'est comme ça que tu apprendras "intelligemment": en comparant, en essayant de comprendre et en te "réappropriant" les choses au fur et à mesure). Au passage, un petit merci fait toujours plaisir!
Complète ma proposition pour faire en sorte que le code s'exécute aussi lorsqu'une "feuille" est cochée, sans changement dans la ComboBox ... ou opte pour la proposition de Si... (je jure de ne pas en être vexé! ;))

En pièce jointe, une "refonte" de ma proposition et d'une partie de ton code (j'ai supprimé la formule que tu insérais, pour ensuite faire un collage spécial "valeur": ça devenait un peu "tiré par les cheveux")

Pour répondre à ta question sur srcValid, il fallait également modifier le n° de colonne dans le tout dernier 'If' et indiquer "Sheets("Menus déroulants").Cells(1000, 1)" à la place de "Sheets("Menus déroulants").Cells(1000, 6)".
J'ai apporté une petite modif à la formule pour nommer la plage (pour éviter une erreur lors du "ClearContents", quand la plage était vide)

Attention:
en feuille "STE", la suppression d'une partie des n° d'acheteurs n'est que partielle: des données réapparaissent en ligne 73 (j'ai cherché pendant un temps d'où sortaient ces n° fantômes que je ne voyais pas dans les 37 premières lignes :eek:)

Bonne nuit tout le monde :)
 

Pièces jointes

  • RFQ (lepigoennier) V2.xlsm
    109.3 KB · Affichages: 35

Si...

XLDnaute Barbatruc
Re : Liste de validation avec une condition

Salut

Modeste :D,
à mon violon très spécial, comme mon arc, j’ai rajouté une corde pour le rendre plus efficace (j’utilise énormément, comme beaucoup, le Si…) :p.

Tu as bien exprimé ce que j’ai ressenti lors de la lecture de la dernière demande. Comme je n’étais pas interpellé, je me suis abstenu de répondre. Mais l’abstinence n’est pas mon fort et les boutons me pourrissent la vie, aussi je propose une autre approche*.

lepigeonnier :cool:,
Je me suis servi de la feuille "Menus déroulants" où la liste des noms ne contient pas tous ceux qui apparaissent dans les 3 cas et j’ai alors ajouté un message d’alerte.

Le bien nommé Modeste a appelé la liste de validation "srcValid", et moi "Lv" (allez savoir pourquoi !). Étant donné que les autres feuilles semblent fluctuer, je l’ai placée dans la première.

Sur ce, bon courage et bonne continuation.

*dont la maintenance peut être assurée par nombre de participants.
 

Pièces jointes

  • Liste de validation Variable (VBA).xlsm
    103.3 KB · Affichages: 45

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 500
dernier inscrit
Suk Ram