Extraire des données Excel pour le coller dans un tableau Word
Bonjour à tous,
J'aurai besoin pour un projet d'extraire sur un fichier Excel le contenu de certaines cellules et de le coller dans un tableau Word.
Voici un exemple du fichier Excel :
Ce que je voudrais plus précisément dans cet exemple, c'est extraire à chaque fois la référence et le nombre de chaque objets.
L'extraction devrait suivre ce processus :
- J'identifie l'alias (ex : MOT), je me place sur la ligne de cet alias puis je me place aux colonnes C et D et j'extrais le contenu de ces deux cellules que je copie sur le bon tableau Word (identifié par son alias)
- Je fais exactement la même chose pour les autres objets (Pare-choc, Voiture...)
Voici le tableau sur lequel le contenu des cellules référence et nombre devrait être
Je voudrais donc que la macro identifie sur le tableau Word la ligne où il faut coller l'information grâce à son alias (même alias que sur Excel).
Puis ensuite dès que la ligne a été identifié le coller dans la bonne colonne.
J'espère que j'ai été claire dans ce que je souhaiterai faire.
Toute aide serait la bienvenue :)
Merci d'avance et bonne journée !
Bonjour,
Trop facile, une double boucle et hop :
Sub Complete_tableau(num As Integer, T As Variant)
Dim i As Integer, j As Integer
With WordDoc.Tables(num)
For i = 1 To UBound(T)
For j = 2 To .Rows.Count
If T(i, 1) = Left(.Cell(j, 2).Range.Text, Len(T(i, 1))) Then
.Cell(j, 3).Range.Text = T(i, 3)
.Cell(j, 4).Range.Text = T(i, 4)
End If
Next j
Next i
End With
End Sub
voir fichier démo
Pierre
Salut Pierre,
Je te remercie énormément pour ta réponse je crois que c'est bien ce que je voulais faire :)
Je vais regarder ton fichier, le tester pour voir si c'est ce que je voulais.
Je reviendrai vers toi !
Re Pierre, c'est exactement ce que je voulais faire mais je ne comprends pas dans le code comment il place l'information au bon endroit en identifiant l'alias.
Fin je ne vois pas où est déclaré dans le code le fait que l'information est extraite d'excel au tableau Word sur la ligne de l'alias.
Désolé, pour les questions je suis novice
Bonjour,
Alors voici un essai d'explications (c'est pas mon fort).
- la zone excel "source" (dans l'exemple A2:D6) est indiquée dans la ligne :
If Exist_Tableau(1) Then Complete_tableau 1, Sheets(1).Range("A2:D6").Value
- cette zone correspond au tableau T (au sens array) de :
Sub Complete_tableau(num As Integer, T As Variant)
- dans cette Sub Complete_tableau
, on boucle sur les lignes de T, et pour chaque valeur de la colonne 1 on boucle sur les lignes du tableau word (au sens grille) pour tester si la valeur de la colonne 2 correspond
A noter : la valeur .Cell(j, 2).Range.Text
contient une marque de fin de paragraphe d’où le left(trucmachin
pour tester si T(i, 1)
est contenu dans .Cell(j, 2).Range.Text
Je ne sais pas si c'est bien explicite?
Pierre
D'accord merci beaucoup j'ai compris :)
Pierre, j'aurai une dernière demande.
Je voudrais faire la même chose donc extraire les données de certaines cellules Excel et les copier dans un tableau Word.
La seule chose qui change c'est qu'au lieu d'avoir un seule tableau est d'extraire tous les éléments identifiés avec leur alias, je voudrai avoir plusieurs tableaux donc un tableau par alias. Par exemple tableau 1 = MOT, tableau 2 = PAR et tableau 3 = VOIT.
Comme ci-dessous :
Pour l'identification des tableaux je les identifie pas par son n° d'ordre du genre ActiveDocument.Tables(1) ou par l'utilisation d'un signet.
Mais je leur attribue un titre en allant dans les propriétés du tableau.
Donc pour mon exemple, j'appelle tous les tableaux avec le même titre : TAB1.
Voici un exemple de code que j'ai été amené à développer qui montre comment ajouter 5 colonnes à tous les tableaux contenant le titre TAB1 sur Word :
Sub Modifier_Tableau_Titre()
Dim tableau As Table
With ActiveDocument
If .Tables.Count >= 1 Then
'Si il y a un ou plusieurs tableaux
For Each tableau In ActiveDocument.Tables
'On rentre dans la boucle For pour tous les tableaux du document Word
If tableau.Title = "TAB1" Then
'On ne modifie pas le tableau si il ne s'appelle pas TAB1
Do While tableau.Columns.Count <= 1
'On modifie les tableaux que s'ils contiennent une colonne
With tableau
Selection.InsertColumnsRight
Selection.InsertColumnsRight
Selection.InsertColumnsRight
Selection.InsertColumnsRight
Selection.InsertColumnsRight
'On ajoute 5 colonnes au tableau
End With
Loop
End If
Next tableau
End If
End With
End Sub
Mon problème est que j'arrive à modifier des tableaux en leur attribuant un titre depuis Word.
Mais modifier des tableaux Word avec des titres depuis Excel ça je ne sais pas faire.
Je ne sais pas si tu as une solution, mais si oui je suis preneur :)
Bjr,
Il ne me semble pas utile de s'embêter avec des noms de tableaux. S'ils ont tous la même structure, il suffit encore ici de boucler.
Sub Complete_tableauX(T As Variant)
Dim i As Integer, j As Integer
With WordDoc
For i = 1 To .Tables.Count
For j = 1 To UBound(T)
If T(j, 1) = Left(.Tables(i).Cell(2, 2).Range.Text, Len(T(j, 1))) Then
.Tables(i).Cell(2, 3).Range.Text = T(j, 3)
.Tables(i).Cell(2, 4).Range.Text = T(j, 4)
End If
Next j
Next i
End With
End Sub
Faire simple.
Pierre
Salut Pierre, oui ta solution est beaucoup plus simple je te remercie énormément pour ton aide de qualité !