VBA Word - Signet et autres codes

Résolu
8e8e
Messages postés
13
Date d'inscription
lundi 10 janvier 2011
Statut
Membre
Dernière intervention
12 janvier 2011
- 10 janv. 2011 à 09:49
8e8e
Messages postés
13
Date d'inscription
lundi 10 janvier 2011
Statut
Membre
Dernière intervention
12 janvier 2011
- 12 janv. 2011 à 16:08
Bonjour,

J'aurais besoin d'un petit d'aide.
Je ne suis pas un pro en VBA... loin de là

Soit un document excel contenant des données.
Soit un document word récupérant les données contenues dans certaines cellules d'excel via une macro qui s'exécute via un bouton.

Pour ce faire, j'ai inséré des signets dans le document word. Dans le VBA j'ai inséré le code suivant :
Sub TexteCellule()
Dim xlApp As Excel.Application
Dim xlWb As Excel.Workbook
Dim xlSh As Excel.Worksheet
Dim sttemp As String
 
Set xlApp = New Excel.Application
Set xlWb = xlApp.Workbooks.Open("c:\temp\a.xlsx")
Set xlSh = xlWb.Sheets(1)
 
sttemp = xlSh.Cells(1, 1)
'Trf du contenu de la cellule vers le signet
ActiveDocument.Bookmarks("S1").Range.Text = xlSh.Cells(1, 1)
Debug.Print sttemp
 
xlWb.Close
xlApp.Quit
Set xlWb = Nothing
Set xlApp = Nothing
 
End Sub



La macro remplit sa mission première mais j'aimerais approfondir ce code.
En effet, j'aimerais que quand j'exécute la macro, le texte contenu dans les cellules ne s'ajoute pas au texte apparu lors d'une exécution précédente de la macro mais remplace le texte existant par le nouveau (est ce clair ?).


Merci beaucoup

22 réponses

bigfish_le vrai
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
12
11 janv. 2011 à 13:59
2ieme partie:

quand on pose une question on la pose en entier !!! au debut tu nous as parlé de signet S1, S2 etc ors je découvre qu'ils s'appellent:

numéro, marché etc.

Du coup faut coder différemment et moi j'ai pas que ça à faire

l'enervement passé (faut bien se déstresser ), voila la suite :

la aussi pas besoin de répéter le code. N’oublie jamais qu'en prog il faut être fainéant, il y a presque toujours une solution pour éviter cela.

Sub MiseAJour()
   Dim xlApp As Excel.Application
   Dim xlWb As Excel.Workbook
   Dim xlSh As Excel.Worksheet
   Dim sttemp As String, Ligne As Integer, MaListeDeSignets As Variant
   
    'liste des signets qui correspond également au nombre de valeurs à récupérer
    MaListeDeSignets = Array("numéro", "marché_de", "intitulé", "durée") 'les signets supplémentaires doivent être ajoutés ici
 
   Set xlApp = New Excel.Application
   Set xlWb = xlApp.Workbooks.Open(ThisDocument.Path & Application.PathSeparator & "données.xls") 'c:\temp\a.xlsx")
   Set xlSh = xlWb.Sheets(1)
 
    'on boucle sur la liste
   For Ligne = 0 To UBound(MaListeDeSignets) 'ubound sert à compter le nombre de valeur contenu dans la variable "MaListeDeSignets"
      'on recupere les valeurs dans le fichier excel
      sttemp = xlSh.Cells(Ligne + 1, 2)
      'Trf du contenu de la cellule vers le signet
      Call BookmarkNewValue(MaListeDeSignets(Ligne), sttemp)
   Next
 
   xlWb.Close
   xlApp.Quit
   Set xlWb = Nothing
   Set xlApp = Nothing
 
End Sub

Sub BookmarkNewValue(ByVal NomSignet As String, ByVal NouvelleValeurSignet As String)
    If ActiveDocument.Bookmarks.Exists(NomSignet) Then
        ActiveDocument.Bookmarks(NomSignet).Select
        Selection = NouvelleValeurSignet 'le bug est ici... le remplacement de la valeur supprime le signet
        Selection.Bookmarks.Add Name:=NomSignet, Range:=Selection.Range
        Selection.MoveRight Unit:=wdCharacter, Count:=1
    End If
End Sub



A+
0
8e8e
Messages postés
13
Date d'inscription
lundi 10 janvier 2011
Statut
Membre
Dernière intervention
12 janvier 2011

12 janv. 2011 à 16:08
Bonjour,

Merci beaucoup pour vos réponses.
Quelques éléments à rajouter je pense mais je vais essayer de me débrouiller.


Merci beaucoup !
0