Bonsoir à tous,
Pour me faciliter la vie et celle de mes collègue je me suis lancer dans une macro d'extraction depuis excel vers word. Cependant je n'est aucune connaissance en VBA, j'ai des notions d'autre langage de programmation orienté objet alors je me suis dit : "aller jme lance ça doit pas être si compliquer". J'ai donc commencer par me renseigné sur le sujet pour avoir de bonne base, puis j'ai codé et lus des messages d'autres membres qui souhaitaient plus ou moins faire la même chose que moi.
Bon passons maintenant à mon problème, j'ai donc réaliser une macro qui marche et qui extrait la date et les cases entre 2 cellules donné avec la méthode "range" (je vous joint tout les code plus loin)[1]. Ce genre de macro marche bien pour chaque rapport qui ont les sauts de page au même endroit mais ce n'est pas toujours le cas, je suis donc partis à la recherche d'un moyens plus approprié pour automatiser avec n'importe qu'elle rapport, leur point commun étant la mise en page et la zone d'impression (impossible d'utiliser le nom zone_d_impression dans range car cela met mes 10 pages or je veux chaque page indépendantes).
j'ai donc trouver une méthode HPageBreaks qui pourrait me sauver mais je n'arrive pas à l'utiliser correctement cela m'affiche un message d'erreur.
Voici comment je l'utilise :
Si j'ai bien compris je me place dans la feuille "Matrice rapport" au saut de page n°1 sans offset car je veux la cellule suivante (j'utilise l'offset pour récupérer la cellule d'avant afin de les renseigner dans le "range"
Code : Sélectionner tout - Visualiser dans une fenêtre à part Sheets("Matrice rapport").HPageBreaks(1).Location.Offset(0, 0).Address
Une dernière question la function que j'utilise pour récupérer la date me la donne sous forme de texte dans un tableau, est t'il possible de récupérer les caractères et de les mettre a la suite du texte à mon signet ?
Code [1] fonctionnel mais pas optimiser :
Code [2] avec la tentative rater
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 Sub extraction() CopDate CopPage1 CopPage2 CopPage3 CopPage4 CopPage5 End Sub Function CopDate() 'Nécessite d'activer la référence "Microsoft Word xx.x Object Library" 'Lancement application Word 'Référence Microsoft Word 14.0 Object Library chargée dans menu déroulant Outils Dim aWord As Word.Application Set aWord = CreateObject("Word.Application") 'Ouverture du rapport-type, rendu visible aWord.Documents.Open ("C:\Users\TFT\Théo FEUILLET\Rapport_Type.docx") aWord.Visible = False 'Copie 1 depuis Excel\Feuil1 Sheets("Matrice rapport").Select Range("H54").Select Selection.Copy 'Cherche "date" dans le rapport-type aWord.Selection.Goto What:=wdGoToBookmark, Name:="date" 'Colle la selection au signet défini sous forme d'un texte aWord.Selection.PasteSpecial DataType:=ppPasteDefault, Link:=False 'Colle la selection au signet défini sous forme d'une image 'aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, DisplayAsIcon:=False 'Variantes Options de collage : '- aWord.Selection.PasteAndFormat (wdPasteDefault) : copie en format tableau / ajuste à la largeur de la page word '- aWord.Selection.Paste '- aWord.Documents.Tables(1).AutoFitBehavior wdAutoFitWindow aWord.Quit SaveChanges:=wdSaveChanges End Function Function CopPage1() 'Nécessite d'activer la référence "Microsoft Word xx.x Object Library" 'Lancement application Word 'Référence Microsoft Word 14.0 Object Library chargée dans menu déroulant Outils Dim aWord As Word.Application Set aWord = CreateObject("Word.Application") 'Ouverture du rapport-type, rendu visible aWord.Documents.Open ("C:\Users\TFT\Théo FEUILLET\Rapport_Type.docx") aWord.Visible = False 'Copie 1 depuis Excel\Feuil1 Sheets("Matrice rapport").Select Range("A72:J138").Select Selection.Copy 'Cherche "ici" dans le rapport-type aWord.Selection.Goto What:=wdGoToBookmark, Name:="ici1" 'Colle la selection au signet défini sous forme d'une image aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, DisplayAsIcon:=False 'Variantes Options de collage : '- aWord.Selection.PasteAndFormat (wdPasteDefault) : copie en format tableau / ajuste à la largeur de la page word '- aWord.Selection.Paste '- aWord.Documents.Tables(1).AutoFitBehavior wdAutoFitWindow aWord.Quit SaveChanges:=wdSaveChanges End Function
Voilà voilà,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 Function CopPage1() 'déclaration des variables pour la selection Dim celDeb As Cell Dim celFin As Cell 'on recherche la cellule le saut de page n°(x) et on la place dans notre variable 'Mieux déclarer mes variable ESSAIE SANS DECLA Sheets("Matrice rapport").HPageBreaks(1).Location.Offset(0, 0).Address = celDeb Sheets("Matrice rapport").HPageBreaks.Item(2).Location.Offset(-1, 10).Adress = celFin 'Nécessite d'activer la référence "Microsoft Word xx.x Object Library" 'Lancement application Word 'Référence Microsoft Word 14.0 Object Library chargée dans menu déroulant Outils Dim aWord As Word.Application Set aWord = CreateObject("Word.Application") 'Ouverture du rapport-type, rendu visible aWord.Documents.Open ("C:\Users\TFT\Théo FEUILLET\Rapport_Type.docx") aWord.Visible = False 'Copie 1 depuis Excel\Feuil1 Sheets("Matrice rapport").Select Range("celDeb:celFin").Select Selection.Copy 'Cherche "ici" dans le rapport-type aWord.Selection.Goto What:=wdGoToBookmark, Name:="ici1" 'Colle la selection au signet défini sous forme d'une image aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, DisplayAsIcon:=False 'Variantes Options de collage : '- aWord.Selection.PasteAndFormat (wdPasteDefault) : copie en format tableau / ajuste à la largeur de la page word '- aWord.Selection.Paste '- aWord.Documents.Tables(1).AutoFitBehavior wdAutoFitWindow aWord.Quit SaveChanges:=wdSaveChanges End Function
Merci pour votre aide !
Partager