8e8e
Messages postés13Date d'inscriptionlundi 10 janvier 2011StatutMembreDernière intervention12 janvier 2011
-
10 janv. 2011 à 09:49
8e8e
Messages postés13Date d'inscriptionlundi 10 janvier 2011StatutMembreDernière intervention12 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 ?).
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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