D'excel à word : piloter la couleur de fond d'un tableau

Résolu
Atraxor Messages postés 20 Date d'inscription lundi 29 août 2011 Statut Membre Dernière intervention 5 décembre 2011 - 5 déc. 2011 à 13:08
Atraxor Messages postés 20 Date d'inscription lundi 29 août 2011 Statut Membre Dernière intervention 5 décembre 2011 - 5 déc. 2011 à 15:50
Bonjour.

Je cherche à réaliser l'action suivante :

En fonction de la valeur contenue dans une cellule d'un tableur excel, je voudrais que la couleur d'arrière plan d'un tableau sous word soit changée.

Voici le code utilisé :

If Sheets("Resultats incertitudes").Range("C17") <= 5 Then
wrddoc.Tables(2).Cell(1, 1).Tables(1).Shading.BackgroundPatternColor = wdColorBrightGreen    
wrddoc.Tables(3).Shading.BackgroundPatternColor = wdColorBrightGreen
ElseIf Sheets("Resultats incertitudes").Range("C17") <= 7 Then
    wrddoc.Tables(2).Cell(1, 1).Tables(1).Shading.BackgroundPatternColor = wdColorOrange
    wrddoc.Tables(3).Shading.BackgroundPatternColor = wdColorOrange
Else
    wrddoc.Tables(2).Cell(1, 1).Tables(1).Shading.BackgroundPatternColor = wdColorRed
    wrddoc.Tables(3).Shading.BackgroundPatternColor = wdColorRed
End If


Le problème étant que quelle que soit la valeur prise apr la cellule, mon tableau sera invariablement colorié en noir ...

Une idée à propos de ce problème ?

11 réponses

Atraxor Messages postés 20 Date d'inscription lundi 29 août 2011 Statut Membre Dernière intervention 5 décembre 2011
5 déc. 2011 à 15:50
j'ai trouvé une solution peu élégante, mais qui a le mérite de marcher :

je remplace les constantes de type wdBlack/wdcolor par le code RGB équivalent.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 déc. 2011 à 13:22
Bonjour,
1) àon ne sait pas dans quel évènement tu as mis ce code.
2) toutes tes "constantes" de couleur montrées ici n'étant pas reliées à Word, elles ont bien évidemment les valeurs de VBA/Excel, c'est à dire 0 puisqu'inconnues de VBA/Excel et 0 = Noir !
On ne répètera jamais assez la nécessité d'utiliser option Explicit. Si tu l'avais fait, auraient immédiatement été dénoncées les variables 'et pas des "constantes", là..) :
- wdColorBrightGreen
- wdColorOrange
- wdColorRed




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 déc. 2011 à 13:29
et de toutes manières :
même avec des points d'arrêt ou en exécutant pas à pas (ce que tu n'as manifestement pas fait non plus), tu te serais aperçu de la valeur 0
de chacune de ces variables/couleur. Et cela t'aurait permis de ne pas venir ici poser n'importe quelle question sans savoir ce qu'il y avait derrière !
Non ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Atraxor Messages postés 20 Date d'inscription lundi 29 août 2011 Statut Membre Dernière intervention 5 décembre 2011
5 déc. 2011 à 13:38
L'évenement lié suis le click sur un button qui ouvre un document word (au format prédéfini) à partir d'un userform ouvert sous excel : je vous passe les détails du code qui ne nous intéressent pas ici.

Le wrddoc représente donc le document word déjà ouvert.

En effet vu comme ça ça a l'air d'être un problème de savoir à quelle bibliothèque vba fait appel.

Je crois avoir plutôt bien cerné l'idée comme quoi je ne code pas comme il faut. ca me motive aussi pas mal à me débrouiller par moi même en voyant comment je suis reçu quand je pose une banale question.

Maintenant s'il y avait moyen, éventuellement, d'envisager de solutionner mon problème plutôt de juste dire ce qui ne va pas ça m'arrangerait pas mal.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 déc. 2011 à 14:23
Ah bon ?
Tu n'as pas eu de solution ?
Tu en as eu deux pour le prix d'une, me semble-t-il, pourtant (en utilisant autant de neurones que de solutions, soit deux)!
- soit tu affectes une couleur VBA/Excel, mais avec une constante VBA/Excel
- soit tu affectes une couleur VBA/Word, mais en précisant qu'elle est le l'objet Word ouvert !
Je regrette que réfléchir te fatigue. Désolé pour toi ! Mais c'est comme cela, avec moi : je force à réfléchir un peu (rien de tout ce qui n'irait pas dans ce sens ne saurait être ma tasse de thé).
Mais si tu n'aimes pas, pas de problèmes ===>> continue seul, donc
Bonne chance.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 déc. 2011 à 14:28
et au passage (quand même !) si l'on avait vu le code que tu penses ne pas nous intéresser, j'aurais probablement été à même de te dire comment utiliser les constantes couleurs de l'objet ouvert. Mais ça n'a pas été le cas . Te reste à ce stade, donc (car je ne reviendrai plus dans la présente discussion, puisque prise ainsi) la possibilité d'utiliser les constantes "en cours" (celles de VBA/Excel, donc.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Atraxor Messages postés 20 Date d'inscription lundi 29 août 2011 Statut Membre Dernière intervention 5 décembre 2011
5 déc. 2011 à 14:48
Soit, autant ne pas épiloguer, je vais me démerder seul.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 déc. 2011 à 14:50
Et avec ce que je t'ai dit, les efforts ne seront pas "démesurés", non ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Atraxor Messages postés 20 Date d'inscription lundi 29 août 2011 Statut Membre Dernière intervention 5 décembre 2011
5 déc. 2011 à 14:57
Oui, j'arrive à présent à cerner le problème, cependant il me manque la méthode pour accéder aux librairies de constantes/procédures de word depuis le vb excel, rien de plus ...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 déc. 2011 à 15:06
Bis repetita ? OK ===>
si l'on avait vu le code que tu penses ne pas nous intéresser, j'aurais probablement été à même de te dire comment utiliser les constantes couleurs de l'objet ouvert. Mais ça n'a pas été le cas

Cela ne te parle pas non plus ?
Et as-tu au moins profité de ce que je t'ai dit plus haut, à propos de l'utilisation de Option Explicit (qui t'aurait permis de venir ici en meilleure connaissance de cause) ?
Le problème semble être que tu viens à la fois demander de l'aide, mais n'a apparemment pas la moindre intention de participer, d'écouter, etc...
Et voilà comment on en arrive au 10ème message pour une affaire vraiment "banale" (comme tu dis).
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Atraxor Messages postés 20 Date d'inscription lundi 29 août 2011 Statut Membre Dernière intervention 5 décembre 2011
5 déc. 2011 à 15:20
Soit.

Private Sub CommandButton1_Click()

Dim wrdapp As Object
Dim racine As String

racine = ActiveWorkbook.Path

On Error Resume Next
Set wrdapp = GetObject(, "Word.Application")    'on vérifie si word n'est pas déjà ouvert, si c'est le cas on le ferme
On Error GoTo 0
If wrdapp Is Nothing Then
    Err.Clear
Else
    On Error Resume Next
    DisplayAlerts = False
    wrdapp.Quit False 'si ouvert, on ferme toutes les applications word
    DisplayAlerts = True
    If Err 0 Then trouve True
    On Error GoTo 0
End If

    Set wrdapp = CreateObject("Word.Application")
    Set wrddoc = wrdapp.Documents.Open(racine & "\EVALUATION DES INCERTITUDES DE MESURES.dot")
    wrdapp.ActiveDocument.SaveAs Filename:=(Nomemplacement & "Incertitudes_" & Emplacement & ".doc")
    
wrddoc.Tables(1).Cell(2, 1).Range.Font.Name = "Tahoma"
wrddoc.Tables(1).Cell(2, 1).Range.Font.Size = 16
wrddoc.Tables(1).Cell(2, 1).Range.Text = "Jaugeage : " & Emplacement

wrddoc.Tables(2).Columns(1).Cells(1).Range.inlineshapes.AddPicture Filename:="C:\WINDOWS\Temp\imageTemp1.gif", linktofile:=False, savewithdocument:=True    'on insère la première image
wrddoc.Tables(2).Columns(2).Cells(1).Range.inlineshapes.AddPicture Filename:="C:\WINDOWS\Temp\imageTemp2.gif", linktofile:=False, savewithdocument:=True
wrddoc.Tables(2).Columns(2).Cells(2).Range.inlineshapes.AddPicture Filename:="C:\WINDOWS\Temp\imageTemp3.gif", linktofile:=False, savewithdocument:=True

With wrddoc.inlineshapes(wrddoc.inlineshapes.Count)
    .Borders.enable = False
End With
wrddoc.Tables(2).Cell(1, 1).Tables(1).Cell(1, 3).Range.Text = Label28.Caption

wrddoc.Tables(3).Cell(1, 2).Range.Text = Label4.Caption
wrddoc.Tables(3).Cell(1, 4).Range.Text = Label5.Caption

wrddoc.Tables(4).Cell(2, 3).Range.Text = Label18.Caption
wrddoc.Tables(4).Cell(3, 3).Range.Text = Label19.Caption
wrddoc.Tables(4).Cell(4, 3).Range.Text = Label20.Caption
wrddoc.Tables(4).Cell(5, 3).Range.Text = Label21.Caption
wrddoc.Tables(4).Cell(6, 3).Range.Text = Label22.Caption
wrddoc.Tables(4).Cell(7, 3).Range.Text = Label23.Caption
wrddoc.Tables(4).Cell(8, 3).Range.Text = Label24.Caption
wrddoc.Tables(4).Cell(9, 3).Range.Text = Label25.Caption
wrddoc.Tables(4).Cell(10, 3).Range.Text = Label26.Caption
wrddoc.Tables(4).Cell(11, 3).Range.Text = Label51.Caption

'If Sheets("Resultats incertitudes").Range("C17") <= 5 Then
    'wrddoc.Tables(2).Cell(1, 1).Tables(1).Shading.BackgroundPatternColor = wdWhite
    'wrddoc.Tables(3).Shading.BackgroundPatternColor = wdWhite
'Else
    'wrddoc.Tables(2).Cell(1, 1).Tables(1).Shading.BackgroundPatternColor = wdBlack
    'wrddoc.Tables(3).Shading.BackgroundPatternColor = wdBlack
'End If

wrdapp.Visible = True

End Sub


Pour anticiper certains commentaires tout de même :
-oui c'est mal codé
-oui c'est mal commenté
-oui ça ressemble à rien

mais à part la question des couleurs, ça marche.
0
Rejoignez-nous