OVH Cloud OVH Cloud

Comment "ripper" les données d'une base de données en ligne sous excel vers un tableau word?

15 réponses
Avatar
chalo
Bonjour =E0 tous, je suis confront=E9 au probl=E8me suivant:j'ai sous word
des tableaux dont je souhaite transf=E9rer les donn=E9es vers excel d'une
part, et d'autre paret je voudrais pouvoir remplir une base de donn=E9es
sous excel (l=E0 =E7a va sous liste en formulaire ou avec un userform ) et
transf=E9rer ( c'est l=E0 que je perds pied....) les donn=E9es obtenues sous=

word dans ces tableaux d'autre part.
Les tableau du document word une fois copier-coller sous excel se
pr=E9sente comme ceci
http://www.cijoint.fr/cjlink.php?file=3Dcj200802/cij2316455295505.xls.

Merci par avance =E0 tous.

Chalo

5 réponses

1 2
Avatar
francois.forcet
On 27 fév, 15:10, chalo wrote:
On 27 fév, 13:14, wrote:

Rebonjours Chalo

Laligne:

Workbooks("Classeur1.xls").Activate

demande d'activer le classeurExcelnommé Classeur1.xls

C'est dans ce classeur que je comptais recopier lesdonnéesWord
C'est dans celui-là que j'ai inclu la macro
Comme cette macro est entrain de s'éxécuter ce classeur est
obligatoirement ouvert donc lalignene dois pas buger


et pourtant c'est bien ce qui se passe à moins qu'excelnommant un
nouveau classeur par défaut classeur1 dans mon système, il y ait
plusieurs classeur1 qui se baladent......En fait la macro ouvre bienwordma is ensuite elle semble peiner à revenir suexcelavec un
classeur activé....







Je suppose que la macro d'importation est dans un fichierExcelqui ne
porte pas ce nom
d'ou le plantage à cetteligne

3 solutions :

Soit tu actualises cetteligneen remplaçant "Classeur1.xls" par le
nom du classeur qui porte la macro
LesdonnéesWordseront rapportées dans la feuille active de celui-ci
Si tu souhaites spécifié l'onglet de réception desdonnéestu peux
rajouter cetteligneen suivant :

Workbooks("Nom du classeur.xls").Activate
Sheets("Nom de l'onglet").Activate

Soit tu actualises cetteligneen remplaçant "Classeur1.xls" par le
nom du classeur qui doit recevoir lesdonnées
Mais attention ce classeur doit être ouvert


Cette solution là est la seule que j'arrive à faire fonctionner et
c'est déjà pas mal!





Soit tu ouvres un nouveau classeur dans lequel on rapportera les
donnéesen remplaçant lalignepar :

Workbooks.Add

A toi de me dire ce que tu souhaites- Masquer le texte des messages pr écédents -


- Afficher le texte des messages précédents -- Masquer le texte des me ssages précédents -

- Afficher le texte des messages précédents -


Rebonjours Chalo

Regardes bien dans les Fenètres Excel l'appelation exacte de ton
document Excel

Celà peut être "Classeur1" au lieu de "Classeur1.xls"
Donc dans cette hypothèse il faut mettre :

Workbooks("Classeur1").Activate

Une autre solution si tu souhaites ramener les données dans le
classeur de la macro c'est de mettre en tout début de code cette
ligne :

Classeur = ActiveWorkbook.Name

et de modifier la ligne qui bug ainsi :

Workbooks(Classeur).Activate

Là il est certain que celà fonctionnera

Essaies et dis moi !!!!


Avatar
chalo
On 27 fév, 17:59, wrote:
On 27 fév, 15:10, chalo wrote:





On 27 fév, 13:14, wrote:

Rebonjours Chalo

Laligne:

Workbooks("Classeur1.xls").Activate

demande d'activer le classeurExcelnommé Classeur1.xls

C'est dans ce classeur que je comptais recopier lesdonnéesWord
C'est dans celui-là que j'ai inclu la macro
Comme cette macro est entrain de s'éxécuter ce classeur est
obligatoirement ouvert donc lalignene dois pas buger


et pourtant c'est bien ce qui se passe à moins qu'excelnommant un
nouveau classeur par défaut classeur1 dans mon système, il y ait
plusieurs classeur1 qui se baladent......En fait la macro ouvre bienword mais ensuite elle semble peiner à revenir suexcelavec un
classeur activé....

Je suppose que la macro d'importation est dans un fichierExcelqui ne
porte pas ce nom
d'ou le plantage à cetteligne

3 solutions :

Soit tu actualises cetteligneen remplaçant "Classeur1.xls" par le
nom du classeur qui porte la macro
LesdonnéesWordseront rapportées dans la feuille active de celui-ci
Si tu souhaites spécifié l'onglet de réception desdonnéestu pe ux
rajouter cetteligneen suivant :

Workbooks("Nom du classeur.xls").Activate
Sheets("Nom de l'onglet").Activate

Soit tu actualises cetteligneen remplaçant "Classeur1.xls" par le
nom du classeur qui doit recevoir lesdonnées
Mais attention ce classeur doit être ouvert


Cette solution là est la seule que j'arrive à faire fonctionner et
c'est déjà pas mal!

Soit tu ouvres un nouveau classeur dans lequel on rapportera les
donnéesen remplaçant lalignepar :

Workbooks.Add

A toi de me dire ce que tu souhaites- Masquer le texte des messages pr écédents -


- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Rebonjours Chalo

Regardes bien dans les Fenètres Excel l'appelation exacte de ton
document Excel

Celà peut être "Classeur1" au lieu de "Classeur1.xls"
Donc dans cette hypothèse il faut mettre :

 Workbooks("Classeur1").Activate

Une autre solution si tu souhaites ramener les données dans le
classeur de la macro c'est de mettre en tout début de code cette
ligne :

Classeur = ActiveWorkbook.Name

et de modifier la ligne qui bug ainsi :

Workbooks(Classeur).Activate

Là il est certain que celà fonctionnera

Essaies et dis moi !!!!- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


le Classeur s'appelait bien Classeur1 au lieu de Classeur1.xls, ça
fonctionne au poil maintenant;
mais bon ça peut être utile de procéder avec le ocde supplémentaire
Classeur¬tiveWorkbook.Name

Encore un grand merci, je m'attèle maintenant à la création des
userforms pour renseigner la matrice sous excel avant de l'exporter en
document word.
Chalo



Avatar
chalo
On 27 fév, 17:59, wrote:
On 27 fév, 15:10, chalo wrote:





On 27 fév, 13:14, wrote:

Rebonjours Chalo

Laligne:

Workbooks("Classeur1.xls").Activate

demande d'activer le classeurExcelnommé Classeur1.xls

C'est dans ce classeur que je comptais recopier lesdonnéesWord
C'est dans celui-là que j'ai inclu la macro
Comme cette macro est entrain de s'éxécuter ce classeur est
obligatoirement ouvert donc lalignene dois pas buger


et pourtant c'est bien ce qui se passe à moins qu'excelnommant un
nouveau classeur par défaut classeur1 dans mon système, il y ait
plusieurs classeur1 qui se baladent......En fait la macro ouvre bienword mais ensuite elle semble peiner à revenir suexcelavec un
classeur activé....

Je suppose que la macro d'importation est dans un fichierExcelqui ne
porte pas ce nom
d'ou le plantage à cetteligne

3 solutions :

Soit tu actualises cetteligneen remplaçant "Classeur1.xls" par le
nom du classeur qui porte la macro
LesdonnéesWordseront rapportées dans la feuille active de celui-ci
Si tu souhaites spécifié l'onglet de réception desdonnéestu pe ux
rajouter cetteligneen suivant :

Workbooks("Nom du classeur.xls").Activate
Sheets("Nom de l'onglet").Activate

Soit tu actualises cetteligneen remplaçant "Classeur1.xls" par le
nom du classeur qui doit recevoir lesdonnées
Mais attention ce classeur doit être ouvert


Cette solution là est la seule que j'arrive à faire fonctionner et
c'est déjà pas mal!

Soit tu ouvres un nouveau classeur dans lequel on rapportera les
donnéesen remplaçant lalignepar :

Workbooks.Add

A toi de me dire ce que tu souhaites- Masquer le texte des messages pr écédents -


- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Rebonjours Chalo

Regardes bien dans les Fenètres Excel l'appelation exacte de ton
document Excel

Celà peut être "Classeur1" au lieu de "Classeur1.xls"
Donc dans cette hypothèse il faut mettre :

 Workbooks("Classeur1").Activate

Une autre solution si tu souhaites ramener les données dans le
classeur de la macro c'est de mettre en tout début de code cette
ligne :

Classeur = ActiveWorkbook.Name

et de modifier la ligne qui bug ainsi :

Workbooks(Classeur).Activate

Là il est certain que celà fonctionnera

Essaies et dis moi !!!!- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Bonjour,
encore une dernière chose à demander:existe-t-il la possibilité lors
de l'exportation Excel vers Word d'obtenir un format paysage sous word
pour le document exporté par code?Cela augmenterait la lisibilité des
tableaux....
Chalo



Avatar
francois.forcet
On 28 fév, 14:36, chalo wrote:
On 27 fév, 17:59, wrote:





On 27 fév, 15:10, chalo wrote:

On 27 fév, 13:14, wrote:

Rebonjours Chalo

Laligne:

Workbooks("Classeur1.xls").Activate

demande d'activer le classeurExcelnommé Classeur1.xls

C'est dans ce classeur que je comptais recopier lesdonnéesWord
C'est dans celui-là que j'ai inclu la macro
Comme cette macro est entrain de s'éxécuter ce classeur est
obligatoirement ouvert donc lalignene dois pas buger


et pourtant c'est bien ce qui se passe à moins qu'excelnommant un
nouveau classeur par défaut classeur1 dans mon système, il y ait
plusieurs classeur1 qui se baladent......En fait la macro ouvre bienwo rdmais ensuite elle semble peiner à revenir suexcelavec un
classeur activé....

Je suppose que la macro d'importation est dans un fichierExcelqui ne
porte pas ce nom
d'ou le plantage à cetteligne

3 solutions :

Soit tu actualises cetteligneen remplaçant "Classeur1.xls" par le
nom du classeur qui porte la macro
LesdonnéesWordseront rapportées dans la feuille active de celui- ci
Si tu souhaites spécifié l'onglet de réception desdonnéestu peux
rajouter cetteligneen suivant :

Workbooks("Nom du classeur.xls").Activate
Sheets("Nom de l'onglet").Activate

Soit tu actualises cetteligneen remplaçant "Classeur1.xls" par le
nom du classeur qui doit recevoir lesdonnées
Mais attention ce classeur doit être ouvert


Cette solution là est la seule que j'arrive à faire fonctionner et
c'est déjà pas mal!

Soit tu ouvres un nouveau classeur dans lequel on rapportera les
donnéesen remplaçant lalignepar :

Workbooks.Add

A toi de me dire ce que tu souhaites- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte de s messages précédents -

- Afficher le texte des messages précédents -


Rebonjours Chalo

Regardes bien dans les Fenètres Excel l'appelation exacte de ton
document Excel

Celà peut être "Classeur1" au lieu de "Classeur1.xls"
Donc dans cette hypothèse il faut mettre :

 Workbooks("Classeur1").Activate

Une autre solution si tu souhaites ramener les données dans le
classeur de la macro c'est de mettre en tout début de code cette
ligne :

Classeur = ActiveWorkbook.Name

et de modifier la ligne qui bug ainsi :

Workbooks(Classeur).Activate

Là il est certain que celà fonctionnera

Essaies et dis moi !!!!- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Bonjour,
encore une dernière chose à demander:existe-t-il la possibilité lors
de l'exportation Excel vers Word d'obtenir un format paysage sous word
pour le document exporté par code?Cela augmenterait la lisibilité des
tableaux....
Chalo- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Salut Chalo

Une petite astuce pour récupérer des commandes
Concernant le format paysage sous Word j'ai opéré comme ceci :

J'ai ouvert un nouveau document Word
Avec l'enregistreur de macro Word j'ai mis en mode page Paysage
J'ai obtenu ce code :

With ActiveDocument.Styles(wdStyleNormal).Font
If .NameFarEast = .NameAscii Then
.NameAscii = ""
End If
.NameFarEast = ""
End With
With ActiveDocument.PageSetup
.LineNumbering.Active = False
.Orientation = wdOrientLandscape
.TopMargin = CentimetersToPoints(3.17)
.BottomMargin = CentimetersToPoints(3.17)
.LeftMargin = CentimetersToPoints(2.54)
.RightMargin = CentimetersToPoints(2.54)
.Gutter = CentimetersToPoints(0)
.HeaderDistance = CentimetersToPoints(1.25)
.FooterDistance = CentimetersToPoints(1.25)
.PageWidth = CentimetersToPoints(29.7)
.PageHeight = CentimetersToPoints(21)
.FirstPageTray = wdPrinterDefaultBin
.OtherPagesTray = wdPrinterDefaultBin
.SectionStart = wdSectionNewPage
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.VerticalAlignment = wdAlignVerticalTop
.SuppressEndnotes = False
.MirrorMargins = False
.TwoPagesOnOne = False
.BookFoldPrinting = False
.BookFoldRevPrinting = False
.BookFoldPrintingSheets = 1
.GutterPos = wdGutterPosLeft
End With

Les lignes importantes pour cette action sont :

With ActiveDocument.PageSetup
.Orientation = wdOrientLandscape

Reste à l'adapter à ton code ainsi :

oWdApp.ActiveDocument.PageSetup.Orientation = wdOrientLandscape

Ce qui donne le code d'exportation :

Range("A1", "P" & Range("A1").SpecialCells(xlLastCell).Row).Copy
Dim oWdApp As Object
'Lancer Word
Set oWdApp = CreateObject("Word.Application")
With oWdApp
'Afficher Word si nécessaire...
.Visible = True
'Ouvrir le document Word
Set WordDoc = oWdApp.Documents.Open("E:FORCETcomparePrototype outils
cij10340277965646.doc")
'Orienter la feuille en mode Paysage
oWdApp.ActiveDocument.PageSetup.Orientation = wdOrientLandscape
'Positionner le curseur en début de tableau
oWdApp.Selection.Find.ClearFormatting
With oWdApp.Selection.Find
.Text = "Nom du client : "
End With
oWdApp.Selection.Find.Execute
'selectionner tous les tableaux et les remplacer
oWdApp.Selection.SelectCurrentIndent
oWdApp.Selection.PasteExcelTable False, False, False
End With
'Enregistrer et fermer le document et l'application Word
WordDoc.Close SaveChanges:=wdPromptToSaveChanges
oWdApp.Quit

Et le tour est joué

Tu peux t'inspirer à l'avenir de cette manière de procéder pour faire
évoluer ton code

Espérant avoir répondu à ton attente

Dis moi !!!!!




Avatar
chalo
On 29 fév, 08:15, wrote:
On 28 fév, 14:36, chalo wrote:





On 27 fév, 17:59, wrote:

On 27 fév, 15:10, chalo wrote:

On 27 fév, 13:14, wrote:

Rebonjours Chalo

Laligne:

Workbooks("Classeur1.xls").Activate

demande d'activer le classeurExcelnommé Classeur1.xls

C'est dans ce classeur que je comptais recopier lesdonnéesWord
C'est dans celui-là que j'ai inclu la macro
Comme cette macro est entrain de s'éxécuter ce classeur est
obligatoirement ouvert donc lalignene dois pas buger


et pourtant c'est bien ce qui se passe à moins qu'excelnommant un
nouveau classeur par défaut classeur1 dans mon système, il y ait
plusieurs classeur1 qui se baladent......En fait la macro ouvre bien wordmais ensuite elle semble peiner à revenir suexcelavec un
classeur activé....

Je suppose que la macro d'importation est dans un fichierExcelqui ne
porte pas ce nom
d'ou le plantage à cetteligne

3 solutions :

Soit tu actualises cetteligneen remplaçant "Classeur1.xls" par l e
nom du classeur qui porte la macro
LesdonnéesWordseront rapportées dans la feuille active de celu i-ci
Si tu souhaites spécifié l'onglet de réception desdonnéest u peux
rajouter cetteligneen suivant :

Workbooks("Nom du classeur.xls").Activate
Sheets("Nom de l'onglet").Activate

Soit tu actualises cetteligneen remplaçant "Classeur1.xls" par l e
nom du classeur qui doit recevoir lesdonnées
Mais attention ce classeur doit être ouvert


Cette solution là est la seule que j'arrive à faire fonctionner et
c'est déjà pas mal!

Soit tu ouvres un nouveau classeur dans lequel on rapportera les
donnéesen remplaçant lalignepar :

Workbooks.Add

A toi de me dire ce que tu souhaites- Masquer le texte des message s précédents -


- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Rebonjours Chalo

Regardes bien dans les Fenètres Excel l'appelation exacte de ton
document Excel

Celà peut être "Classeur1" au lieu de "Classeur1.xls"
Donc dans cette hypothèse il faut mettre :

 Workbooks("Classeur1").Activate

Une autre solution si tu souhaites ramener les données dans le
classeur de la macro c'est de mettre en tout début de code cette
ligne :

Classeur = ActiveWorkbook.Name

et de modifier la ligne qui bug ainsi :

Workbooks(Classeur).Activate

Là il est certain que celà fonctionnera

Essaies et dis moi !!!!- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Bonjour,
encore une dernière chose à demander:existe-t-il la possibilité lo rs
de l'exportation Excel vers Word d'obtenir un format paysage sous word
pour le document exporté par code?Cela augmenterait la lisibilité de s
tableaux....
Chalo- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Salut Chalo

Une petite astuce pour récupérer des commandes
Concernant le format paysage sous Word j'ai opéré comme ceci :

J'ai ouvert un nouveau document Word
Avec l'enregistreur de macro Word j'ai mis en mode page Paysage
J'ai obtenu ce code :

With ActiveDocument.Styles(wdStyleNormal).Font
        If .NameFarEast = .NameAscii Then
            .NameAscii = ""
        End If
        .NameFarEast = ""
    End With
    With ActiveDocument.PageSetup
        .LineNumbering.Active = False
        .Orientation = wdOrientLandscape
        .TopMargin = CentimetersToPoints(3.17)
        .BottomMargin = CentimetersToPoints(3.17)
        .LeftMargin = CentimetersToPoints(2.54)
        .RightMargin = CentimetersToPoints(2.54)
        .Gutter = CentimetersToPoints(0)
        .HeaderDistance = CentimetersToPoints(1.25)
        .FooterDistance = CentimetersToPoints(1.25)
        .PageWidth = CentimetersToPoints(29.7)
        .PageHeight = CentimetersToPoints(21)
        .FirstPageTray = wdPrinterDefaultBin
        .OtherPagesTray = wdPrinterDefaultBin
        .SectionStart = wdSectionNewPage
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .VerticalAlignment = wdAlignVerticalTop
        .SuppressEndnotes = False
        .MirrorMargins = False
        .TwoPagesOnOne = False
        .BookFoldPrinting = False
        .BookFoldRevPrinting = False
        .BookFoldPrintingSheets = 1
        .GutterPos = wdGutterPosLeft
    End With

Les lignes importantes pour cette action sont :

 With ActiveDocument.PageSetup
 .Orientation = wdOrientLandscape

Reste à l'adapter à ton code ainsi :

oWdApp.ActiveDocument.PageSetup.Orientation = wdOrientLandscape

Ce qui donne le code d'exportation :

Range("A1", "P" & Range("A1").SpecialCells(xlLastCell).Row).Copy
Dim oWdApp As Object
'Lancer Word
Set oWdApp = CreateObject("Word.Application")
With oWdApp
'Afficher Word si nécessaire...
.Visible = True
'Ouvrir le document Word
Set WordDoc = oWdApp.Documents.Open("E:FORCETcomparePrototype outils
cij10340277965646.doc")
'Orienter la feuille en mode Paysage
oWdApp.ActiveDocument.PageSetup.Orientation = wdOrientLandscape
'Positionner le curseur en début de tableau
oWdApp.Selection.Find.ClearFormatting
 With oWdApp.Selection.Find
        .Text = "Nom du client : "
 End With
 oWdApp.Selection.Find.Execute
'selectionner tous les tableaux et les remplacer
    oWdApp.Selection.SelectCurrentIndent
    oWdApp.Selection.PasteExcelTable False, False, False
End With
'Enregistrer et fermer le document et l'application Word
WordDoc.Close SaveChanges:=wdPromptToSaveChanges
oWdApp.Quit

Et le tour est joué

Tu peux t'inspirer à l'avenir de cette manière de procéder pour fair e
évoluer ton code

Espérant avoir répondu à ton attente

Dis moi !!!!!- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Super, merci beaucoup!
Chalo





1 2