Affichage dans "Liste déroulante" selon sélection nom avec "case à cocher"

targa

XLDnaute Junior
Bonjour j'ai un petit problème à soumettre, j'ai fait pas mal de forum pour essayer de trouver une solution, mais je n'ai rien trouvé en rapport à ce que je souhaite.

Il faudrait qu'il apparaît dans une liste déroulante, que les noms qui ont été cochés dans la base qui est sur une feuille à part.

Quelqu'un aurait-il une solution?

Un grand merci pour votre aide.

Ci-joint mon fichier d'exemple.

Salutation.
 

Pièces jointes

  • Liste_deroulante_choix.xls
    23 KB · Affichages: 58
  • Liste_deroulante_choix.xls
    23 KB · Affichages: 65
  • Liste_deroulante_choix.xls
    23 KB · Affichages: 75

Robert

XLDnaute Barbatruc
Repose en paix
Re : Affichage dans "Liste déroulante" selon sélection nom avec "case à cocher"

Bonjour Targa, bonjour le forum,

En pièce jointe ton fichier modifié. J'ai supprimé toutes les cases a cocher. Il te suffit de cliquer sur une cellule vide pour la cocher d'un X ou sur une cellule contenant X pour le faire disparaître.
Les deux macros événementielles SelectionChange et Change font le reste...
Le code :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'au changement de la cellule active dans l'onglet
If Target.Column <> 7 Or Target.Row = 1 Then Exit Sub 'si la cellule active n'est pas dans la colonne 7 (=G) ou se trouve sur la ligne 1, sort de la procédure
Target.Value = IIf(Target.Value = "", "X", "") 'écrit "X" si la cellule est vide, vide la cellule si elle contien "X" (alterne entre "X" et vide)
End Sub
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim o As Object 'déclare la variable o (Onglet)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CEllule)
Dim list As String 'déclare la variable list (LISTe)

If Target.Column <> 7 Or Target.Row = 1 Then Exit Sub 'si la cellule active n'est pas dans la colonne 7 (=G) ou se trouve sur la ligne 1, sort de la procédure
Set o = Sheets("Feuil1") 'définit l'onglet o
dl = Cells(Application.Rows.Count, 7).End(xlUp).Row 'définit la dernière ligne édité dl de la colonne 7 (=G)
Set pl = Range("G2:G" & dl) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    'si la valeur de la cellule est "X", définit la liste list
    If UCase(cel.Value) = "X" Then list = IIf(list = "", cel.Offset(0, -6).Value & ",", list & cel.Offset(0, -6).Value & ",")
Next cel 'prochaine cellule de la boucle
With o.Range("D2") 'prend en comptela cellule D2 de l'onglet o
    .Value = "" 'efface la cellule
    With .Validation 'prend en compte la validation de données
        .Delete 'efface une éventuelle validation de données existante
        If list <> "" Then 'condition : si list n'est pas vide
            'ajoute list comme liste de validation de données a la cellule
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=list
        End If 'fin de la condition
    End With 'fin de la prise en comte de la validation de données
End With 'fin de la prise en compte de la cellule D2 de l'onglet o
End Sub
Le fichier :
 

Pièces jointes

  • Targa_v01.xls
    50.5 KB · Affichages: 66
G

Guest

Guest
Re : Affichage dans "Liste déroulante" selon sélection nom avec "case à cocher"

Bonjour,
Hello Robert:)

Voir dans fichier joint, liste filtrée par formule matricielle dans la troisème colonne du tableau 'Liste1' et comment est définit le nom L_RA.

A+
A+++Robert
 

targa

XLDnaute Junior
Re : Affichage dans "Liste déroulante" selon sélection nom avec "case à cocher"

Bonjour à tous,

Merci à vous tous, alors je viens de voir les solutions un peu à tous.

Alors je commence par la solution à Gilbert_RGI, qui me paraîssée la plus facile pour moi car pas besoin de code VBA, déjà un grand merci, mais je me rends compte que sitôt que je rajoute un nom, qu'il faut malheureusement à chaque fois modifier manuellement dans la définition des noms, les paramêtres champ-cond et liste, donc pas très pratique.

pour ce qui s'agit de la solution à Hasco:
Ta solution serait parfaite, masi j'ai un problème, ensuite la liste ne se déroule pas ! :(
Je pense qu'il s'agit d'un petit bug, s'aurais-tu me le corriger?

Pour la 1ere solution à Robert:
Eventuellement à mettre en dernière solution si je peux pas faire autrement, masi le problème est que j'ai déjà du code VBA dans la feuille avec la fonction "Private Sub Worksheet_Change", donc comment intégrer ton code avec celui existant?

le code:
-------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'Code exécuter lors d'un changement dans la valeur d'une cellule quelconque de la feuille
'La cellule H6 fait-elle partie de la ou des cellules modifiées
If Not Application.Intersect(Target, Range("B4")) Is Nothing Then
'La cellule B4 est ou fait partie des cellules modifiées
'Test de la valeur de la cellule B4,
'ne pas utiliser l'objet Target, un message d'erreur est retourné si Target représente une plage de cellules
If Range("B4") = "Adrien" Then
MacroVisibleOui
Else
MacroVisibleNon
End If
End If
End Sub
-------------------------------------------------------------------

Merci encore à vous tous, et si Hasco ou Robert peuvent me donner une solution à ce probleme, je suis partant pour les votre.

Un grand merci d'avance
Slt
Targa
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Affichage dans "Liste déroulante" selon sélection nom avec "case à cocher"

Bonjour le fil, bonjour le forum,

Tu peux combiner les deux actions sans problème comme ça :
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim o As Object 'déclare la variable o (Onglet)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CEllule)
Dim list As String 'déclare la variable list (LISTe)

If Not Application.Intersect(Target, Range("B4")) Is Nothing Then
'La cellule B4 est ou fait partie des cellules modifiées
'Test de la valeur de la cellule B4,
'ne pas utiliser l'objet Target, un message d'erreur est retourné si Target représente une plage de cellules
    If Range("B4") = "Adrien" Then
        MsgBox "Oui" 'MacroVisibleOui
    Else
        MsgBox "Non" 'MacroVisibleNon
    End If
End If

If Target.Column <> 7 Or Target.Row = 1 Then Exit Sub 'si la cellule active n'est pas dans la colonne 7 (=G) ou se trouve sur la ligne 1, sort de la procédure
Set o = Sheets("Feuil1") 'définit l'onglet o
dl = Cells(Application.Rows.Count, 7).End(xlUp).Row 'définit la dernière ligne édité dl de la colonne 7 (=G)
Set pl = Range("G2:G" & dl) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    'si la valeur de la cellule est "X", définit la liste list
    If UCase(cel.Value) = "X" Then list = IIf(list = "", cel.Offset(0, -6).Value & ",", list & cel.Offset(0, -6).Value & ",")
Next cel 'prochaine cellule de la boucle
With o.Range("D2") 'prend en comptela cellule D2 de l'onglet o
    .Value = "" 'efface la cellule
    With .Validation 'prend en compte la validation de données
        .Delete 'efface une éventuelle validation de données existante
        If list <> "" Then 'condition : si list n'est pas vide
            'ajoute list comme liste de validation de données a la cellule
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=list
        End If 'fin de la condition
    End With 'fin de la prise en comte de la validation de données
End With 'fin de la prise en compte de la cellule D2 de l'onglet o
'Code exécuter lors d'un changement dans la valeur d'une cellule quelconque de la feuille
'La cellule H6 fait-elle partie de la ou des cellules modifiées
End Sub
 

CHALET53

XLDnaute Barbatruc
Re : Affichage dans "Liste déroulante" selon sélection nom avec "case à cocher"

Bonjour,

Je n'avais pas envoyé ma proposition trouvant qu'il y en avait assez

a+
 

Pièces jointes

  • Liste_deroulante_choix.xls
    52.5 KB · Affichages: 62
  • Liste_deroulante_choix.xls
    52.5 KB · Affichages: 62
  • Liste_deroulante_choix.xls
    52.5 KB · Affichages: 62
G

Guest

Guest
Re : Affichage dans "Liste déroulante" selon sélection nom avec "case à cocher"

Re,
Targa post#5 à dit:
...masi j'ai un problème, ensuite la liste ne se déroule pas ! :(
Je pense qu'il s'agit d'un petit bug, s'aurais-tu me le corriger?

Oui je pense qu'il s'agit d'une incompatibilité 2010/2003. J'ai oublié certains des changements de version en version.
Dans le fichier joint ici, j'ai redéfini le nom L_RA sur une plage de cellules possibles jusqu'à 999 lignes. A toi d'adapter.

Dis si cela va mieux,
A+
 
Dernière modification par un modérateur:

targa

XLDnaute Junior
Re : Affichage dans "Liste déroulante" selon sélection nom avec "case à cocher"

Bonjour à tous,

Un GRAND MERCI pour vos réponses! :)

Merci à Robert pour la modification du code VBA, cela fonctionne merveilleusement bien. :) C'est pratique, simple à l'utilisation, enfin c'est tout simplement Génial !!! :D

Merci à Hasco pour la modification du fichier pour Excel 2003, en effet la liste déroulante fonctionne maintenant sous 2003.
Mais je vais garder aussi ta version 2010, car dès l'année prochaine, la société ou je travaille, change de version et vient en vers. Office 2010, donc je vais l'utiliser. ;-).

Et merci aussi à CHALET53, ta solution est aussi bien, mais avec du code VBA.

Enfin, merci, merci à tous pour vos solutions, c'est très sympa de votre part, vous êtes supers et super rapide d'avoir répondus.

En vous souhaitant une excellente journée! :)

Targa
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 894
Membres
103 404
dernier inscrit
sultan87