Sélectionner valeur d'une cellule dans code VBA
Bonjour le forum,
j'aimerais automatiser un peu le processus d'impression par lot en n'ayant pas besoin d'aller modifier mon code manuellement.
Est-il possible de sélectionner des valeurs (Q7 à Q11) d'après la valeur de "P5" dans une liste déroulante.
Pour l'instant j'active ou désactive manuellement mais à terme j'aimerais pouvoir imprimer une feuille par rapport au no de semaine en "O5"
Sub Export_PDF() 'sans impression*****************ok au 12/02/2022
Dim Fichier As String
Dim plage As Range
Dim first As Variant
Dim r As Range, c As Range, inputRange As Range
'Set plage = Intersect([1:65536], ActiveSheet.UsedRange)
'semaine 1 du plan
Set plage = Sheets("PlanC").Range("A1:N14")
'semaine 2 du plan
'Set plage = Sheets("PlanC").Range("A15:N28")
'semaine 3 du plan
'Set plage = Sheets("PlanC").Range("A29:N42")
'semaine 4 du plan
'Set plage = Sheets("PlanC").Range("A43:N56")
'semaine 5 du plan
'Set plage = Sheets("PlanC").Range("A57:N70")
'semaine 1 à 5 du plan
'Set plage = Sheets("PlanC").Range("A1:N70")
If Not plage Is Nothing Then ActiveSheet.PageSetup.PrintArea = plage.Address
' Location of DataValidation cell
Set r = Worksheets("PlanC").Range("A1")
' Get DataValidation values
Set inputRange = Evaluate(r.Validation.Formula1)
Application.ScreenUpdating = False
For Each c In inputRange
If first = "" Then first = c.Value
If c <> "" Then
r.Value = c.Value
DateH = Format(Date, "yyyy")
'adaptez le nom de la feuille
With Worksheets("PlanC")
'Fichier = .Range("A1") & " Septembre " & .Range("b2") & ".pdf "
Fichier = .Range("A1") & " semaine " & .Range("O5") & " " & DateH & ".pdf"
dossier = ThisWorkbook.Sheets("COLLEGUES").Range("M4").Value 'chemin à modifier dans PARAMETRES
Chemin = dossier & Fichier
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End With
End If
Next c
' réinitialiser
r = first
Application.ScreenUpdating = True
End SubJ'espère que j'ai été assez précis dans ma demande et merci d'avance pour votre aide.
Ricky
Bonjour Bruno,
Je pensais que juste avec ces exemples cela pouvait suffire, désolé...
J'ai du changer pas mal de chose car j'ai des données sensibles sur le fichier.
le code que j'aimerais modifié ce trouve sur l'onglet "planC"
Est-il possible de sélectionner des valeurs (Q7 à Q12) d'après la valeur de "P5" dans une liste déroulante. en sachant qu'il y a 5 grilles différentes sur la feuille
'semaine 1 du plan
Set plage = Sheets("PlanC").Range("A1:N14")
'semaine 2 du plan
'Set plage = Sheets("PlanC").Range("A15:N28")
'semaine 3 du plan
'Set plage = Sheets("PlanC").Range("A29:N42")
'semaine 4 du plan
'Set plage = Sheets("PlanC").Range("A43:N56")
'semaine 5 du plan
'Set plage = Sheets("PlanC").Range("A57:N70")et une 6ème qui englobe les 5 Grilles( semaines)
'Set plage = Sheets("PlanC").Range("A1:N70")Merci de votre aide.
Bonjour,
C'est toujours plus simple avec un fichier, cela permet de tester
A part le fait que je n'ai absolument pas compris à quoi servait votre boucle
For Each c In inputRangeVoici le code pour sélection de la plage
Sub Export_PDF()
Dim Chemin As String, NomFichier As String
Dim Plage As Range, sRng As String
Dim first As Variant
Dim r As Range, c As Range, inputRange As Range
Dim NbJ As Integer, NumPlage As Integer
' Avec la feuille à traiter
With Sheets("planC")
' Récupérer le chemin d'enregistrement : 1 fois suffit
Chemin = .Range("R3").Value
If Chemin <> "" And Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
' Nom du fichier
NomFichier = .Range("A1") & " semaine " & .Range("O5") & " " & DateH & ".pdf"
'
' Calculer la plage à prendre
NbJ = DateDiff("d", .Range("P7").Value, .Range("P5").Value)
NumPlage = (NbJ / 7)
sRng = .Range("Q" & 7 + NumPlage).Value
Set Plage = .Range(sRng)
'
If Not Plage Is Nothing Then .PageSetup.PrintArea = Plage.Address
' Location of DataValidation cell
Set r = .Range("A1")
' Get DataValidation values
Set inputRange = Evaluate(r.Validation.Formula1)
Application.ScreenUpdating = False
Application.EnableEvents = False
For Each c In inputRange
If first = "" Then first = c.Value
If c <> "" Then
r.Value = c.Value
DateH = Format(Date, "yyyy")
' Adaptez le nom de la feuille
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & NomFichier, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End If
Next c
' réinitialiser
r = first
End With
Application.EnableEvents = True
Application.ScreenUpdating = True
End SubDe plus j'ai ajouté un
Application.EnableEvents = FalseSinon au moment de faire
r.Value = c.ValueCela activait
Private Sub Worksheet_Change(ByVal Target As Range)
Worksheet_Activate 'lance la macro
End SubJ'espère que ce sera clair
A+
Merci, beaucoup, mais cela ne fonctionne plus comme avant.
J'ai trouvé le code sur un site, mais je ne connais pas (plus) très bien la programmation. Ca fait plus de 20 ans que j'avais suivis un cours de 3-4 jours sur du VBA. (Et oui ca date).
Merci
Bonjour,
Alors expliques nous comment tu veux que le fichier fonctionne
A+
Le code de base fonctionne bien. Pour ca que j'ai mis le fichier, pour que vous puissiez voir le résultat ;-).
Lorsque je lance la macro, toute la liste des Collaborateurs (en A1) est imprimée en PDF dans le dossier prédéfini.
Pour l'instant, je dois aller dans le VBA et changer manuellement les valeurs:
'semaine 1 du plan
Set plage = Sheets("PlanC").Range("A1:N14")
'semaine 2 du plan
'Set plage = Sheets("PlanC").Range("A15:N28")
'semaine 3 du plan
'Set plage = Sheets("PlanC").Range("A29:N42")
'semaine 4 du plan
'Set plage = Sheets("PlanC").Range("A43:N56")
'plan au mois du plan
'Set plage = Sheets("PlanC").Range("A57:N70")Mais j'aimerais rajouter une fonction pour pouvoir choisir la semaine d'impression d'après la valeur de la cellule "O5" directement sur l'onglet "planC".
j'espère avoir été un peu plus clair.
Merci
Bonjour,
Désolé de vous le dire, mais vous vous répétez
Perso quand je fais tourner votre fichier de mercredi, j'ai un bug...
il m'est donc difficile de comprendre comment ça fonctionne
Sur quoi vous basez-vous pour imprimer vos fiches ?
Quelle est votre logique ?
A+
Voilà je met un lien d'une vidéo d'écran du résultat des opérations.
J'espère que je m'explique un peu mieux et compréhensible.
https://fromsmash . com / explication - et - resultat
Il faut juste enlever les espaces du lien au dessus
Merci