Validation "INDIRECT"
Bonjour à tous,
Il n'y a pas longtemps j'ai utilisé l'aide de FRANGY, qui m'a été d'une très grande aide à ma formule, toutefois j'ai été obligé de changer plusieurs fois et maintenant ma formule comporte une erreur et malgré tout mes essaies à la modifier, rien ne fonctionne.
' Ajout formule R10 Oui
If Target.Count > 1 Then Exit Sub
If Target.Address = "$Q$10" Then
If Target.Value = "Oui" Then
Range("R10").Select
Dim R10_Oui As String
R10_Oui = "_" & Range("F12") & "_" & Range("F10") & "_" & Range("H10") & "_" & Range("J10") & "_" & Replace(Range("L10"), "/", "") & "_" & Replace(Replace(Range("N10"), "/", ""), " ", "") & "_" & Range("P10") & "_" & Range("Q10")
With Range("R10").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=" & R10_Oui
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
End If
End If
Mon problème est au niveau que j'ai mis en surligné, j'explique un peu plus en détail.
Lorsque je fais une sélection en "P10", "Q10" change en validation de donnée et une fois ma sélection faite je désire que "R10" change en validation de donnée lui aussi indirect à ma sélection précédente. J'ai tenté de changer les ", = et les & de place pour voir si cela n'affecterais la phrase et semblerais que la méthode écrit ci-haut est la bonne, mais cela ne fonctionne toujours pas.
Malheureusement mon fichier est rendu trop volumineux et je n'ai aucun moyen de le zipper suffisamment pour l'attaché à ce courriel.
Par contre, je pourrais créer un lien de partage pour le téléchargé si quelqu'un peu m'aider.
Un grand merci de votre aide et bonne journée
Bonjour Buddypaint,
A la main, es-ce que tu arrives à créer la bonne validation des données?
Si la réponse est oui, as-tu essayé l'enregistreur de macros?
Si oui, es-ce que tu peux copier/coller le code généré automatiquement? (qui contiendra ta solution !!)
Si non, je t'invite à l'utiliser: https://www.excel-pratique.com/fr/vba/premiere_macro.php
Si non, dur dur.
J'attends ton retour =)
Bonsoir,
C'est déjà du code en grande partie enregistré, donc mauvais !
La ligne de création du filtre :
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=" & R10_Oui
par la méthode Add : 5 arguments, le premier obligatoire les 4 autres facultatifs ; validation par liste indique le premier, il faut donc fournir la liste (Formula1) et on peut négliger Operator et Formula2, on ne touche par à l'alerte par défaut, on peut donc négliger aussi.
On n'est pas obligé de suivre l'enregistreur dans le passage d'arguments par nom, le passage par position s'avérant plus pratique dans la grande majorité des cas.
.Add xlValidateList, , , R10_Oui
Voilà la ligne optimisée, qui fonctionnera à condition que la liste insérée par la variable R10_Oui soit reconnue valide...
Il s'agit d'une liste passée sous forme de chaîne. Pour l'épuration de la ligne que nous venons de voir, l'Aide suffisait à fournir l'information claire pour y procéder après quelques minutes de lecture, là un peu d'expérience s'avère utile (mais en tâtonnant un peu, on arrive au but).
Lorsque l'on le fait manuellement, on tape les éléments de la liste séparés par des point-virgules.
Mais contrairement aux formules de formats conditionnels que l'on passe en français en VBA, pour la validation il faut les passer en anglais pour que ça marche [pourquoi ces différences...
Il faut donc rectifier la ligne concernée :
R10_Oui = Range("F12") & "," & Range("F10") & "," & Range("H10") & "," & Range("J10") & "," _
& Replace(Range("L10"), "/", "") & "," & Replace(Replace(Range("N10"), "/", ""), " ", "") & "," _
& Range("P10") & "," & Range("Q10")
Voilà qui devrait donc fonctionner...
Dernière remarque : les déclarations de variables se font en début de procédure et non au milieu !
Et j'encourage vivement à épurer le reste du code...
Cordialement.