VBA excel - envoyer des données d'un fichier excel sur plusieurs fichiers words
Bonjour,
Je travaile sur des stats sur un fichier excel et j'aimerais envoyer les données du fichier excel sur plusieurs fichiers word. C'est là que je bloque donc si quelqu'un pouvais m'aider, merci
Voir ci dessous le code: il envoye que sur un fichier word
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
Option Explicit
Sub auto()
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Set WordApp = CreateObject("word.application")
WordApp.Visible = True 'mettre False pour garder Word masqué
Set WordDoc = WordApp.Documents.Open("R:\PREVENTION ET SECURITE\NOUVELLE STRUCTURE\TABLEAUX DE BORD\MODAT Indicateurs\Modat Ind en cours\Année 2011\Docs_pierre\test_vba\Fenouillet_test11.doc") 'ouvre le document Word
'Tables(2) correspond au 2eme tableu du document Word
'transfert la donnée de la cellule A1 dans la 3eme cellule de la 1ere colonne
WordDoc.Tables(3).Columns(2).Cells(2).Range.Text = Sheets("faits_constates").Range("C14").Text
'transfert la donnée de la cellule A2 dans la 2eme cellule de la 3eme colonne
WordDoc.Tables(3).Columns(3).Cells(2).Range.Text = Sheets("coups_blessures").Range("C14").Text
'WordDoc.Close True 'ferme le document Word en enregistrant les modifications
'WordApp.Quit 'ferme l'application Word
End Sub |
Compilation conditionnelle dans Excel VBA
1. Généralisation à plusieurs tableaux dans plusieurs documents Word cibles
Citation:
Envoyé par
peter11
envoyer les données du fichier excel sur plusieurs fichiers word.
Citation:
Envoyé par
peter11
diffusion des données excel sur plusieurs tableaux de plusieurs pages word
Comme le projet se complexifie (plusieurs documents Word cibles contenant plusieurs tableaux), vous ne pourrez pas faire tenir le code dans une seule procédure auto() dans la limite recommandée d'une trentaine de ligne par procédure.
C'est pour cela qu'il faut structurer en procédures courtes comme dans l'exemple que j'avais fourni.
Avec l'augmentation des cibles à mettre à jour, cela signifie également l'augmentation des sources de données, il devient obligatoire de décrire avec précision chaque source et chaque cible avec des constantes dont le nom soit significatif et de mettre en place une gestion d'erreur conséquente sinon la mise au point du projet sera beaucoup plus longue.
A première vue, définir les constantes semble une perte de temps.
En fait au final, cela fait gagner du temps car si on structure bien les noms des constantes, on peut en déduire qu'est-ce qu'on pourra factoriser.
De plus les commentaires de chaque déclaration de constantes apportent une compréhension immédiate du projet en terme de source à lire et de cible à écrire.
2. Compilation conditionnelle #If isNetwork = 1 Then puis #Else ... et enfin #End If dans Excel VBA
Citation:
Envoyé par
peter11
je ne comprends pas comment ça marche
C'est préférable de l'écrire comme cela on peut détailler l'usage de la solution.
En phase de mise au point, c'est plus long d'utiliser le document sur le réseau R:\
Vous l'avez probablement déjà copié en local sur son disque dur dans votre répertoire de travail quelque part dans C:\...
2.1 Définir le chemin du document test11.doc en local sur C:\
Définir ce chemin dans la constante filenameDoc en changeant le chemin suivant du document de test test11.doc
Code:
1 2
| ' Test en local
Public Const filenameDoc = "C:\Users\You\Documents\Excel\Developpez\peter11\test11.doc" |
Cette définition de constante se trouve dans la partie #Else du test #If isNetwork = 1.
2.2 Session de mise au point dans le débogueur
Mettre un point d'arrêt sur la première ligne du programme principal de la maquette RemplirTableauWordDepuisDonneesExcel() :
Code:
If isCopyDoc Then If Not WordCopy(filenameDoc, WordTmp()) Then Exit Sub
Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE (Visual Basic Editeur) d'Excel, copier-coller et valider par ENTER :
Code:
RemplirTableauWordDepuisDonneesExcel
Le programme s'arrête sur le point d'arrêt et l'instruction If isCopyDoc Then devient jaune.
Dans la fenêtre d'édition du VBE, survolez la constante filenameDoc avec le pointeur de la souris pour lire l'info-bulle.
Dans la fenêtre d'Exécution immédiate copier-coller et valider par ENTER :
C:\Users\You\Documents\Excel\Developpez\peter11\test11.doc
Bien sûr, vous avez au préalable adapté la déclaration de la constante filenameDoc avec votre chemin du document Test11.doc dans votre disque dur (pas en réseau).
Stopper l'exécution du la procédure dans le débogueur.
VBE menu "Run" > "Reset".
2.3 Définir la constante de compilation conditionnelle isNetwork dans les propriétés du projet VBA
Dans le VBE, cliquez sur le menu "Outils" > "Propriété de VBA Project" > "Arguments de compilation conditionnelle"
VBE menu "Tools" > "VBAProject Properties" > "Conditional Compilation Arguments"
La dernière zone de saisie correspond à "Arguments de compilation conditionnelle".
Définir la constante isNetwork avec la valeur 1 par un copier-coller de :
2.4 Nouvelle session de mise au point dans le débogueur
Recommencez la session de mise au point avec le point d'arrêt inchangé en début de procédure.
Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel, copier-coller et valider par ENTER :
Code:
RemplirTableauWordDepuisDonneesExcel
Le programme s'arrête sur le point d'arrêt et l'instruction If isCopyDoc Then devient jaune.
Survolez la constante filenameDoc avec le pointeur de la souris pour lire l'info-bulle.
Dans la fenêtre d'Exécution immédiate copier-coller et valider par ENTER :
R:\PREVENTION ET SECURITE\NOUVELLE STRUCTURE\TABLEAUX DE BORD\MODAT Indicateurs\Modat Ind en cours\Année 2011\Docs_pierre\test_vba\Fenouillet_test11.doc
2.5 Conclusion
On peut basculer d'un accès local au document de test test11.doc à un accès distant en réseau en définissant la constante de compilation conditionnelle isNetwork=1 (accès réseau) ou 0 (accès local).
Quand la zone de compilation conditionnelle est vide (aucune constante définie), ce qui était le cas lors de la première session de mise au point dans le débogueur, l'accès local est l'accès par défaut.
Ce principe de compilation conditionnelle selon la constante définie par le développeur évite d'éditer le code source VBA pour basculer entre l'accès local et l'accès en réseau.
Quand le programme sera au point, on indiquera isNetwork=1 dans les paramètres de compilation conditionnelle du projet.
On enlèvera cette constante s'il y a besoin de mettre au point de nouvelles évolutions.
___________
En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert http://www.developpez.net/forums/ima.../vote1left.gif ci-dessous.