XL 2016 boucle code VBA

pika83

XLDnaute Occasionnel
Bonjour, quelqu'un saurait il écrire le code en VBA (boucle) de ceci.

01- copier le nom de la colonne 3, ligne 5 (C5) de la feuille CP-OM
02- coller ce nom sur la feuille FdS Dispo en colonne 9 de la ligne 6 (I6)
03- convertir la feuille FdS Dispo en PDF
04- envoyer PDF par mail
05- répéter cette action
- en copiant le nom de la colonne 3, ligne 6 (C6) de la feuille CP-OM
- en collant ce nom sur la feuille FdS Dispo en colonne 9 ligne 6 (I6)
- convertir la feuille FdS Dispo en PDF
- envoyer PDF par mail
06- répéter cette action
- en copiant le nom de la colonne 3, ligne 7 (C7) de la feuille CP-OM
- en collant ce nom sur la feuille FdS Dispo en colonne 9 ligne 6 (I6)
- convertir la feuille FdS Dispo en PDF
- envoyer PDF par mail
07- répéter cette action
- en copiant le nom de la colonne 3, ligne 8 (C8) de la feuille CP-OM
- en collant ce nom sur la feuille FdS Dispo en colonne 9 ligne 6 (I6)
- convertir la feuille FdS Dispo en PDF
- envoyer PDF par mail
- répéter cette même action jusqu’à la ligne 50 de le colonne 3 (C50)

- dans la continuités
08- copier le nom de la colonne 3, ligne 4 (C4) de la feuille OTCM-OMR
09- coller ce nom sur la feuille FdS Dispo en colonne 9 de la ligne 6 (I6)
10- convertir la feuille FdS Dispo en PDF
11- envoyer PDF par mail
12- répéter cette action
- en copiant le nom de la colonne 3, ligne 5 (C5) de la feuille OTCM-OMR
- en collant ce nom sur la feuille FdS Dispo en colonne 9 ligne 6 (I6)
- convertir la feuille FdS Dispo en PDF
- envoyer PDF par mail
14- répéter cette action
- en copiant le nom de la colonne 3, ligne 6 (C6) de la feuille OTCM-OMR
- en collant ce nom sur la feuille FdS Dispo en colonne 9 ligne 6 (I6)
- convertir la feuille FdS Dispo en PDF
- envoyer PDF par mail
15- répéter cette action
- en copiant le nom de la colonne 3, ligne 7 (C7) de la feuille OTCM-OMR
- en collant ce nom sur la feuille FdS Dispo en colonne 9 ligne 6 (I6)
- convertir la feuille FdS Dispo en PDF
- envoyer PDF par mail
- répéter cette même action jusqu’à la ligne 88 de le colonne 3 (C88)
Fin de la boucle

- Je peux vous joindre mon fichier si besoin, n’hésitez pas.
- Si cela peut aider j'ai un groupe des noms CP-OM (Liste_CP_OM), et un autre groupe (Liste_OTCM_OMR)
- Attention certaines lignes de cette même colonne 3 sont vides et donc a ne pas prendre en compte.
- Pour ce qui est du code "conversion en PDF et envoi par mail" c'est OK et vous le met en fichier joint.

D'avance merci pour votre aide, car ceci étant très répétitif cela me ferais gagner beaucoup de temps.
 

Pièces jointes

  • Envoie_FDS_Dispo_Pdf.txt
    1.3 KB · Affichages: 6

Staple1600

XLDnaute Barbatruc
Bonjour, quelqu'un saurait il conseiller au demandeur de lire la charte du forum ? ...;)

2 – Tous les membres du forum répondent gracieusement aux questions. Il n’y a donc aucune obligation de résultat et de délai. Les mots URGENT, SOS, AU SECOURS sont donc à bannir.
Sans oublier
3 – Le titre de la question doit être clair et comporter explicitement le sujet de la demande.
 

pika83

XLDnaute Occasionnel
Bonjour Staple1600? désolé pour cette incartade, mais très sincèrement je ne savais pas.
S'il y a un moyen de modifier l'intitulé, je suis pret a le modifier, voir s'il y a moyen de supprimer le post, pas de soucis je le ferais.
 

pika83

XLDnaute Occasionnel
merci pour la modif du titre. ;)
mon fichier n'a aucunes données confidentielles, c'est un fichier texte, avec le code VBA qui me permet d' imprimer, de convertir en PDF et d' envoyer par mail la feuille FdS Dispo.
Ne maitrisant pas le VBA je ne sais par ou commencer pour réaliser cette boucle en VBA.
 

Staple1600

XLDnaute Barbatruc
Re


C'eut été plus simple de poster le code existant directement dans le message, non?
Donc je le fais (pour me faciliter la lecture de ton fil ;)
VB:
Sub Envoie_FDS_Dispo_Pdf()
' éviter le friz écran lors de la boucle de masquage ligne vide
With Application
    .ScreenUpdating = False
    .EnableEvents = False
End With

Dim nom As String, ol As Object
Dim olmail, admail As String

'   définition de la liste de diffusion
derlg = Sheets("FdS Dispo").Range("A1")
'   définition des noms
nom = "http://100.100.0.00:00/WebServices/Device" & [A2] & ".pdf"
messmail = "Ci-joint la programmation de travail de la " & [A2]
Subject = "Programmation " & [A2]
Sheets("FdS Dispo").ExportAsFixedFormat Type:=xlTypePDF, Filename:=nom, Quality:= _
   xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
   OpenAfterPublish:=False
   admail = admail & Sheets("FdS Dispo").Range("A1")
Set ol = CreateObject("Outlook.Application")
Set olmail = ol.CreateItem(olMailItem)
With olmail
   .To = admail
   .Subject = Subject 'Sujet
   .Body = messmail 'Corps du mail
   .Attachments.Add nom
    .Display '.Send     'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
End With
' ImpressionFds

    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
    IgnorePrintAreas:=False
Kill nom

With Application
    .ScreenUpdating = True
    .EnableEvents = True
    End With

End Sub
manque plus qu'un fichier Excel (allégé et anonymisé) pour pouvoir aller plus loin.

NB: Boucle code VBA (c'est toujours un titre "bancal")
Une boucle c'est trop vague
 

Staple1600

XLDnaute Barbatruc

pika83

XLDnaute Occasionnel
Mille excuse pour mon manque de connaissance concernant les règles:(.
Effectivement j'ai remonté le post que tu cite et j'ai bien vu que j'avais fait une demande identique. Entretemps j'ai fais évolué mon fichier et ne me souvenais plus de l'avoir posté. N'ayant toujours pas réussi a résoudre ce souci de boucle et oubliant d'avoir déjà crée un post, j'ai posté celui ci.
Afin d’être dans les règles que dois je faire revenir sur mon ancien post et clôturer celui ci ou bien conserver celui ci, car j'avoue que mal grès mes recherches et nombreux exemples consultés je n'ai toujours pas reussi a creer, reproduire un code pour mon onglet FdS Dispo .
Si tu a un idée, je t'en suis reconnaissant et t'en remercie par avance.












;
 

Staple1600

XLDnaute Barbatruc
Re

Pour illustrer le dernier point de mon précédent message...:rolleyes:
VB:
'01- copier le nom de la colonne 3, ligne 5 (C5) de la feuille CP-OM
Sub Macro1() 'macro brute de l'enregistreur de macros
Range("C5").Select
Selection.Copy
Sheets("FdS Dispo").Select
Range("I6").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
Sub Macro2() ' simplification 1
Sheets("CP-OM").Range("C5").Copy
Sheets("FdS Dispo").Range("I6").PasteSpecial Paste:=xlPasteValues
End Sub
Sub Macro3() ' simplification 2
Sheets("CP-OM").Range("C5").Copy Sheets("FdS Dispo").Range("I6")
End Sub
Sub Macro4() 'Et comment moi je ferais ce point 01
[NomFdSD] = Sheets("CP-OM").[C5]
End Sub
Il te reste à faire pareil pour les autres points ;)
1) Faire chauffer l'enregistreur de macros.
2) Simplifier ensuite le code VBA obtenu
3) Et revenir demander aide sur ces tâches si difficultés de simplification
(et cette fois avec une question par discussion et un fichier exemple simple illustrant une seule problématique)

NB: Enfin c'est ce que je ferais, si j'étais moi. ;)
(Et évidemment en cas de multipostage, ne pas oublier de le signaler)
 

pika83

XLDnaute Occasionnel
Un grand merci pour ton aide :), et encore désolé.
Comme je l'ai écrit plus haut je suis pas du tout a l'aise avec ce langage.
j'ai appliqué ton code macro 4 et j'ai modifié l'edition car pas outlook a la maison, du coup je fais comme s'il éditer des feuilles.
Code:
Sub Envoie_FDS_Dispo_Pdf()
' éviter le friz écran lors de la boucle de masquage ligne vide
With Application
    .ScreenUpdating = False
    .EnableEvents = False
End With

'
    [NomFdSD] = Sheets("CP-OM").[C5]

Dim onglet As Worksheet
Dim nom_PDF As String
Dim chemin_PDF As String

nom_PDF = "mon PDF.pdf"

chemin_PDF = "C:\Users\André\Desktop\" & nom_PDF

Set onglet = Worksheets("Fds Dispo")

onglet.Select

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin_PDF, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, _
     IgnorePrintAreas:=False, OpenAfterPublish:=False
  
  
'
    [NomFdSD] = Sheets("CP-OM").[C6]


nom_PDF = "mon PDF.pdf"

chemin_PDF = "C:\Users\André\Desktop\" & nom_PDF

Set onglet = Worksheets("Fds Dispo")

onglet.Select

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin_PDF, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, _
     IgnorePrintAreas:=False, OpenAfterPublish:=False

' ImpressionFds

    'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True,
    'IgnorePrintAreas:=False
'Kill nom

'With Application
    '.ScreenUpdating = True
    '.EnableEvents = True
    'End With

End Sub

cela fonctionne il fait la boucle C5 et C6 mais n’édite que le PDF du C6
et moi j'aurais souhaité qu'il m’édite tout ce qui a dans la boucle.
 
Dernière édition:

pika83

XLDnaute Occasionnel
oui je suis aller voir les 2 liens
effectivement celui de mon post sur l'autre forum qui lui n'a eu aucune réponse et c'est pour cela que je l'ai ré-édité ici peut être de manière plus explicite.
Quand a l'autre lien sur le multi-postage j'y suis allé et même sachant que vous, les pros de excel êtes sur divers forum, j'ai quand même posté celui ci. Mais comme tu dis plus haut,
"Il suffit de prendre le temps de lire, tester, échouer, recommencer etc.. ", je pense que j'ai consulté enormement de post, essayé et ré-essayé de nombreuses choses , et j'avoue je suis deseperé, meme si je pense qu'il for caler "FOR NEXT" ou autre chose comme ca pour faire la boucle, mais le mettre ou et comment voila je suis bloqué.
 

pika83

XLDnaute Occasionnel
je viens de réussir a rentrer ton code dans un classeur j’espère avoir respecte toutes les lignes.
Quand je lance la procédure j'ai un message qui apparait "toto11"ce qui me donne a penser que le code a bien été mis. Mis a part ça, cela ne correspond pas a mon attente qui est de m’éditer des feuilles au format PDF avec les équipes correspondantes a l'agent qui est placé automatiquement en I6 de l’onglet FdS Dispo (a chaque nom , il édite une feuille).
Du coup je vais faire une pose sur ce sujet, continuer a explorer les posts, et voir si je réussi a trouver la solution de cette boucle.
Je tiens quand même a te remercier du temps que tu a consacré a essaye de me faire trouver la solution et encore bravo a toi et a la team du de ce forum, vous êtes très forts.
 

Discussions similaires

Haut Bas