Afficher liste validation sous condition...

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Re : Afficher liste validation sous condition...

Bonjour à tous,
Salut Christian,
Salut Rachid,

VB:
Sub Test()
    On Error Resume Next
    Columns(8).SpecialCells(xlCellTypeAllValidation).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
             xlBetween, Formula1:="=if($E2>42000,Liste,"""")"
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
    Range("H2").Select
End Sub

A+ à tous
 
Re : Afficher liste validation sous condition...

Bonjour à tous,
voici un essai en PJ
MP59
 

Pièces jointes

Re : Afficher liste validation sous condition...

Re, le forum, JCGL, R@chid, MP59

Merci à vous pour votre aide.

Salut JCGL, ta macro je la place ou...lol
Merci, R@chid, ça fonctionne parfaitement mais je préfère par macro.
Merci MP59, mais ça plante dès l'appel d'une date...

à vous lire,
Bien à vous,
Christian
 
Re : Afficher liste validation sous condition...

Bonjour à tous,

VB:
Private Sub CommandButton1_Click()
    Const MCM_FIRST& = &H1000&, MCM_GETCURSEL& = (MCM_FIRST + 1&)
    Dim LeTime As SYSTEMTIME
    'Récuperer la date sélectionnée dans une cellule
    SendMessage mWnd, MCM_GETCURSEL, 0&, LeTime
    With LeTime
        'MsgBox "Vous avez choisi le : " & vbNewLine & vbTab & _
         Format(DateSerial(.wYear, .wMonth, .wDay), "dddd dd mmmm yyyy") & "."
        Date2 = DateSerial(.wYear, .wMonth, .wDay)
        'Récupérer la date sélectionnée dans une TextBox
        If Not ObjetSource Is Nothing Then
            If InStr(1, "Range,TextBox", TypeName(ObjetSource)) > 1 Then ObjetSource.Value = Date2
        End If
    End With
    Unload Me
    On Error Resume Next
    Range("H2:H500").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
             xlBetween, Formula1:="=IF($E2>42000,Liste,"""")"
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
    Range("H2").Select
End Sub

A+ à tous
 

Pièces jointes

Re : Afficher liste validation sous condition...

Bonjour à tous,

Petite amélioration pour atteindre la cellule de validation après sélection d'une date (décalage de trois colonnes vers la droite) :

VB:
Private Sub CommandButton1_Click()Dim Cellule As Range
    Const MCM_FIRST& = &H1000&, MCM_GETCURSEL& = (MCM_FIRST + 1&)
    Dim LeTime As SYSTEMTIME
    SendMessage mWnd, MCM_GETCURSEL, 0&, LeTime
    With LeTime
        Date2 = DateSerial(.wYear, .wMonth, .wDay)
    End With
    Unload Me
    Set Cellule = ActiveCell
    On Error Resume Next
    Range("H2:H500").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
             xlBetween, Formula1:="=IF($E2>42000,Liste,"""")"
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
    Cellule.Offset(, 3).Select
End Sub

A+ à tous
 
Re : Afficher liste validation sous condition...

Bonjour le fil, le forum,

Voici 2 solutions.

Celle du fichier (1) n'est pas bien fameuse :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
[H:H].Validation.Delete 'RAZ
If Not Intersect(ActiveCell, [H:H]) Is Nothing Then
  If IsDate(ActiveCell(, -2)) Then
    Me.Unprotect "toto"
    ActiveCell.Validation.Add xlValidateList, Formula1:="=Liste"
    Me.Protect "toto"
  End If
End If
End Sub
Celle du fichier (2) nécessite une ligne 2 masquée avec la liste de validation en H2 :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim sel As Range, ac As Range
Range("H3:H" & Rows.Count).Validation.Delete 'RAZ
Set sel = Selection: Set ac = ActiveCell
If Not Intersect(ac, [H:H]) Is Nothing Then
  If IsDate(ac(, -2)) Then
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    [H2].Select: [H2] = ac: [H2].Copy ac
    sel.Select: ac.Activate
    Application.EnableEvents = True
  End If
End If
End Sub
Edit : le problème de la 1ère solution est que la déprotection/protection prend du temps.

On est obligé de la faire malgré UserInterfaceOnly = True.

Bonne journée.

A+
 

Pièces jointes

Dernière édition:
Re : Afficher liste validation sous condition...

Bonjour Christian,
cela ne fonctionnait pas uniquement à cause de la protection.
Voici le fichier avec une tentative de résolution de ce problème.
MP59
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
1 K
  • Question Question
Microsoft 365 INDEX equiv
Réponses
1
Affichages
118
Réponses
4
Affichages
224
Retour