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.

exemple 001

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 Sub

J'espère que j'ai été assez précis dans ma demande et merci d'avance pour votre aide.

Ricky

Bonjour Ricky,

Fichier au format Excel (bien entendu)

A+

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 inputRange

Voici 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 Sub

De plus j'ai ajouté un

Application.EnableEvents = False

Sinon au moment de faire

r.Value = c.Value

Cela activait

Private Sub Worksheet_Change(ByVal Target As Range)
  Worksheet_Activate 'lance la macro
End Sub

J'espère que ce sera clair

A+

Merci, beaucoup, mais cela ne fonctionne plus comme avant. je n'ai plus qu'une impression d'un collaborateur à la fois d'oû La boucle "For Each c In inputRange" qui me permet de faire l'impression en lot de tous les collaborateurs en une fois . Ce que ton code ne fait plus.

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 et ça ne fait rien avancer...

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

Rechercher des sujets similaires à "selectionner valeur code vba"