Impression - chaque option liste validation données dynamique

Résolu/Fermé
Signaler
Messages postés
128
Date d'inscription
samedi 4 août 2012
Statut
Membre
Dernière intervention
22 septembre 2020
-
Messages postés
128
Date d'inscription
samedi 4 août 2012
Statut
Membre
Dernière intervention
22 septembre 2020
-
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.

1 réponse

Messages postés
1770
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
11 novembre 2021
662
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
Messages postés
128
Date d'inscription
samedi 4 août 2012
Statut
Membre
Dernière intervention
22 septembre 2020
4
Bonjour Thev,

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

Merci beaucoup :)

Bonne journée
0