Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/09/2011, 09h24   #1
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : septembre 2011
Messages : 9
Points : 3
Points : 3
Par défaut Alimentation d'un tableau word par une macro

Bonjour,

J'ai beau chercher je n'ai pas trouvé de cas similaire au mien

Je vous explique, je dois alimenter un tableau word par une macro.
La macro est générée et exécutée à partir d'une application.

le process est le suivant :
- ouverture d'un modèle de document (contenant des signets)
- alimentation de ces signets par des valeurs passées en paramètres

Mon problème est d'alimenter un tableau contenant un signet (le tableau du modèle à une ligne et x colonne).
Le signet se trouve dans la première cellule et l'alimentation doit se faire en ligne.
Sachant que les données sont constituées sous forme de liste, c'est à dire qu'une fois l'alimentation d'une ligne effectuée on crée une nouvelle et on alimente la suivante.

J'espère avoir été assez clair.

Merci d'avance de vos futures réponses.
YAJ_SKG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 18h32   #2
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut YAJ_SKG,

Tu as presque toute la solution, il ne te manque que le fait de détecter le nombre de fois où tu dois alimenter tes lignes. En effet dans Word, si tu fais tab sur un tableau en fin de tableau, il crée une nouvelle ligne identique à celle du dessus et donc tu peux alors boucler la-dessus.

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 09h03   #3
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : septembre 2011
Messages : 9
Points : 3
Points : 3
Hello,

Merci de ta réponse Sepia.
Mais en fait je crois que j'ai oublié quelque chose dans mon post ... ce qu'il me manque c'est la syntaxe d'alimentation du tableau.

Pour info la liste contenant mes données a la forme suivante :

["Nom du Signet" = ["Valeur 1", "Valeur 2", "Valeur 3", "Valeur 4"]]
YAJ_SKG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 01h12   #4
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut YAJ_SKG,

Pour écrire tes valeurs, lis ton signet et effectue un split sur la virgule, à chaque itération, écris la valeur et effectues une tabulation. Voici une base de travail :

Code :
1
2
3
4
5
6
7
8
9
10
11
aText = <Lire ta ligne qui correspond à ta liste <=> ["Nom du Signet" = ["Valeur 1", "Valeur 2", "Valeur 3", "Valeur 4"]]>
    aNomSignet = Trim(Mid(aText, 1, InStr(aText, "=") - 1))
    aListeValeurs = Trim(Mid(aText, InStr(aText, "=") + 1))
    aListeValeurs = Trim(Mid(aListeValeurs, InStr(aListeValeurs, "[") + 1, InStr(aListeValeurs, "]]") - InStr(aListeValeurs, "[") - 1)) & ","
 
    Selection.GoTo What:=wdGoToBookmark, Name:=aNomSignet
    While InStr(aListeValeurs, ",")
        Selection.TypeText Text:=Mid(aListeValeurs, 1, InStr(aListeValeurs, ",") - 1)
        Selection.MoveRight Unit:=wdCell
        aListeValeurs = Mid(aListeValeurs, InStr(aListeValeurs, ",") + 1)
    Wend
Attention, il n'y a pas de contrôle sur la présence du signet ni sur le nombre de cellules du tableau par rapport à la liste des valeurs.
Cette macro ne fonctionne que s'il n'y a pas de "," dans les valeurs et je n'ai pas utiliser de fonction Trim pour le texte à insérer (car j'ai supposé que des espaces pouvaient faire partie du début ou de la fin des valeurs)
Si tu es dans les cas précédents, on peut améliorer la macro.
@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/09/2011, 09h15   #5
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : septembre 2011
Messages : 9
Points : 3
Points : 3
Merci beaucoup de ta réponse.

Entretemps j'ai trouvé une solution.

Je construis le code de la sorte :

Code :
1
2
3
4
5
6
7
8
Selection.Goto What:= wdGoToBookmark, Name:=  "Nom du Signet"
Selection = "Valeur 1"
Selection.MoveRight Unit:=wdCell
Selection = ""Valeur 2"
Selection.MoveRight Unit:=wdCell
Selection = ""Valeur 3"
Selection.MoveRight Unit:=wdCell
Selection = ""Valeur 4"
J'aurai pu écrire ça dans une boucle (comme tu l'as fait) mais le faire ainsi me permet d'avoir une trace dans le fichier macro que j'écris.
YAJ_SKG est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h11.


 
 
 
 
Partenaires

Hébergement Web