Impression - chaque option liste validation données dynamique

Résolu
Yrmouf Messages postés 141 Statut Membre -  
Yrmouf Messages postés 141 Statut Membre -
Bonjour à tous,

J'ai parcouru le web sans grand succès pour trouver une macro qui permette de lancer une impression en fonction d'une liste de validation de données dynamiques (ce doit être cela qui pose problème d'ailleurs!

Merci d'avance à celui qui pourra m'aider

Sub PrintAll()
    Dim strValidationRange As String
    Dim rngValidation As Range
    Dim rngrotation As Range
     
     ' éteinte de la mise à jour de l'écran
    Application.ScreenUpdating = False
     
     ' Identification de la source de la donnée de validation (qui est dynamique : =DECALER(Feuil1!$G$2;0;0;NBVAL(feuil1!$G:$G);1) vu que la liste est amenée à être modifiée)
    strValidationRange = Range("L5").Validation.Formula1
     
     ' Sélection de chaque choix de cellule de la liste (mais vu que la liste est dynamique et corresponds à une formule je crois que ça bloque le choix des cellules)
 
    For Each rngrotation In strValidationRange
        Range("L5").Value = rngrotation.Value
'impression de la page
        ActiveSheet.PrintOut
    Next
     
    Application.ScreenUpdating = True
End Sub


Merci à ceux qui pourront m'aider

Bonne journée

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

1 réponse

thev Messages postés 1989 Date d'inscription   Statut Membre Dernière intervention   717
 
Bonjour,

Concernant l'utilisation des fonctions DECALER et NBVAL en VBA:
1- la fonction DECALER n'est pas disponible en tant que telle. Elle est remplacée par la propriété Offset d'un objet Range
2- La fonction NBVAL doit être traduite en VBA par COUNTA.
Votre formule n'est donc pas directement utilisable en l'état.

Ci-dessous les instructions que je vous conseille, avec récupération de la cellule de début à partir de votre formule :

Dim cell_début As Range, cell_fin As Range

Set cell_début = Range(Split(Split(Range("L5").Validation.Formula1, "(")(1), ";")(0))
Set cell_fin = cell_début.EntireColumn.Find("*", SearchDirection:=xlPrevious)
For Each rngrotation In Range(cell_début, cell_fin)

--

Autre code possible plus proche de votre formule

Dim cell_début As Range

Set cell_début = Range(Split(Split(Range("L5").Validation.Formula1, "(")(1), ";")(0))
Set strValidationRange = cell_début.Resize(Application.CountA(cell_début.EntireColumn))
For Each rngrotation In strValidationRange

 
1
Yrmouf Messages postés 141 Statut Membre 5
 
Bonjour Thev,

Je n'ai pas très bien compris la fonction Split mais cela fonctionne bien!

Merci beaucoup :)

Bonne journée
0