Intégration d'une variable dans une fonction.

Malcomiix

XLDnaute Nouveau
Bonjour cher membres et staff de XLD.

Je viens vers vous pour vous confronter mon petit soucis du moment...

Je ne fait que débuter en programmation (vba) soyez donc indulgents :)

Voila donc, pour mon BTS je suis amener à créer un Glossaire.

Celui-ci se trouve sur un fichier Glossaire.docx.

Il est lié à un fichier excel, Glossaire.xlsm.

J'ai donc un tableau qui reprends tout les savoir faire de mon Entreprise.

J'ai donc ceci,




J'ai donc un lien hypertexte dans ma colonne de mon tableau appelée "Liens"



Ces liens sont donc écris comme cela,

Code:
=LIEN_HYPERTEXTE("[\\212.85.150.134\Glossaire\Glossaire.docx]X_Bouterollage";"Lien vers la trame")

X_Bouterollage étant mon signet créer dans Word pour pouvoir pointer sur le tableau correspondant.

J'ai le souhait de remplacer [\\212.85.150.134\Glossaire\Glossaire.docx] par une variable (au cas ou le serveur ou se trouve le fichier change, j'anticipe ...). J'ai définis cette variable dans mon code principal.

Il sert à me créer une interface pour pouvoir créer ces lignes là, je vous le link:

Code:
Private Sub cancel_Click()

Unload Me

End Sub

Private Sub OK_Click()

Application.ScreenUpdating = False

Dim dpt, op, place As String

If puissance.Value = True Then
    dpt = "Puissance"
ElseIf signal.Value = True Then
    dpt = "Signal"
ElseIf optique.Value = True Then
    dpt = "Optique"
End If

If dpt = "" Then
MsgBox ("Veuillez selectionner un metier")

End If

op = phase.Value
place = signet.Value
place2 = intitulé.Value

i = Range("B7").End(xlDown).Offset(1, 0).Row
Cells(i, 1).EntireRow.Insert

Cells(i, 2).Value = dpt
Cells(i, 3).Value = op
Cells(i, 4).Value = place2
a = Cells(i, 5).Address

With Worksheets(1)
    .Hyperlinks.Add anchor:=.Range(a), _
        Address:="W:\05 - Méthodes\11 - Méthodes\Glossaire\Glossaire.docx", _
        SubAddress:=place, _
        TextToDisplay:="lien vers la trame"
End With

Unload Me

End Sub
Private Sub UserForm_Initialize()

With Me.phase
For i = 2 To 11
.AddItem Sheets("Macros").Cells(i, 1).Value
Next
End With

End Sub

Il faut bien sur que je garde la compatibilité du signet avec cette variable qui remplacera donc le chemin ou se trouve le .docx...

J'ai trouver une macro qui était capable de changer tout mes liens inscrit en colonne E

Code:
Sub Macro1()
Dim maFeuille As Worksheet
    
    For Each maFeuille In ActiveWorkbook.Worksheets
    
        maFeuille.Activate
        maFeuille.Cells.Replace What:="\\212.85.150.134\Glossaire\Glossaire.docx", Replacement:="M5", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        
    Next
    
End Sub

J'espère avoir été le plus clair possible, si besoin est je rajouterais des informations...


Merci bien


Cordialement.

Malcomiix.
 

Dranreb

XLDnaute Barbatruc
Re : Intégration d'une variable dans une fonction.

Bonjour.
Arrivez vous, oui ou non à obtenir manuellement le lien hypertexte que vous voudriez avec la fonction LIEN_HYPERTEXTE ?
Parce qu'il y a bien un code dans l'userform lien_signet, mais il installe toujours encore un lien en dur dans la feuille avec tous les inconvénient de manque de souplesse que ça comporte. Il n'installe pas de formule par une instruction du genre :
Anc.Formula = "=HYPERLINK(…etc.
Mais si un lien en dur convient aussi, pour qu'il y ait autre chose que "lien" il suffit de le préciser ce que vous voulez à la place au paramètre TextToDisplay.
Avec la fonction LIEN_HYPERTEXTE c'est le 2ième paramètre.
À +
 

Malcomiix

XLDnaute Nouveau
Re : Intégration d'une variable dans une fonction.

Voila la "geule" de mon code à l'heure actuel.


Code:
Private Sub cancel_Click()

Unload Me

End Sub

Private Sub CommandButton1_Click()

End Sub


Private Sub OK_Click()

Application.ScreenUpdating = False

Dim dpt, op, place As String

If puissance.Value = True Then
    dpt = "Puissance"
ElseIf signal.Value = True Then
    dpt = "Signal"
ElseIf optique.Value = True Then
    dpt = "Optique"
End If

If dpt = "" Then
MsgBox ("Veuillez selectionner un metier")

End If

op = phase.Value
place = signet.Value
place2 = intitulé.Value
place3 = "=LIEN_HYPERTEXTE([" & Range("P5") & "]" & place & ";Lien)"


i = Range("B8").End(xlDown).Offset(1, 0).Row

Cells(i, 1).EntireRow.Insert
Cells(i, 2).Value = dpt
Cells(i, 3).Value = op
Cells(i, 4).Value = place2
Cells(i, 5).Value = place3


'a = Cells(i, 5).Address
'With Worksheets(1)
'.Hyperlinks.Add anchor:=Cells(i, 5), _
'Address:=[P5].Value, _
'SubAddress:=place, _
'TextToDisplay:="Lien"


Unload Me


End Sub

Private Sub UserForm_Initialize()

With Me.phase
For i = 2 To 9
.AddItem Sheets("Macros").Cells(i, 1).Value
Next
End With

End Sub

Seul Hic, ma ligne "Cells(i, 5).Value = place3" pointée par VBE, Erreur 1004: Erreur défninie par l'application ou par l'objet

Et normalement avec ce code là je devrais avoir mon lien comme je le souhaite :) ? N'est ce pas ?
Et non du coup je n'est pas encore obtenue mon lien ^^'
 

Dranreb

XLDnaute Barbatruc
Re : Intégration d'une variable dans une fonction.

Place3 n'est ni déclaré As Range ni initialisé par un Set.
Ensuite il faudra dans ce cas sauf erreur :
VB:
place3.FormulaLocal = "=LIEN_HYPERTEXTE(""[""&$P$5&""]" & place & """;""Lien"")"
Mais ça ne fonctionnera que sur des Excel français.

P.S. Je n'avais pas tout vu c'est :
VB:
Cells(i, 5).FormulaLocal = "=LIEN_HYPERTEXTE(""[""&$P$5&""]" & place & """;""Lien"")"
Vous l'affectiez à la propriété Value de la cellule alors que c'est une formule en notation A1 local, ce n'est pas logique.
A +
 
Dernière édition:

Malcomiix

XLDnaute Nouveau
Re : Intégration d'une variable dans une fonction.

J'ai mit ce que vous avez posté précédemment, j'ai une Erreur d'exécution '91':
Variable objet ou variable de bloc With non défninie.

J'ai donc changer ces lignes,


Code:
Private Sub cancel_Click()

Unload Me

End Sub

Private Sub CommandButton1_Click()

End Sub


Private Sub OK_Click()

Application.ScreenUpdating = False

Dim dpt As String, op As String, place As String, place3 As Range

If puissance.Value = True Then
    dpt = "Puissance"
ElseIf signal.Value = True Then
    dpt = "Signal"
ElseIf optique.Value = True Then
    dpt = "Optique"
End If

If dpt = "" Then
MsgBox ("Veuillez selectionner un metier")

End If

op = phase.Value
place = signet.Value
place2 = intitulé.Value
place3.FormulaLocal = "=LIEN_HYPERTEXTE(""[""&$P$5&""]" & place & """;""Lien"")"

i = Range("B8").End(xlDown).Offset(1, 0).Row

Cells(i, 1).EntireRow.Insert
Cells(i, 2).Value = dpt
Cells(i, 3).Value = op
Cells(i, 4).Value = place2
Cells(i, 5).FormulaLocal = "=LIEN_HYPERTEXTE(""[""&$P$5&""]" & place & """;""Lien"")"

Unload Me


End Sub

Private Sub UserForm_Initialize()

With Me.phase
For i = 2 To 9
.AddItem Sheets("Macros").Cells(i, 1).Value
Next
End With

End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Intégration d'une variable dans une fonction.

Bonsoir.
Oui. Supprimer complètement place3. Ça ne sert absolument à rien, c'était seulement Cells(i, 5) plus bas en fait, que je n'avais pas vu.
Mais c'est tellement inhabituel pour moi de voir affecter une expression String commançant par "=… à autre chose qu'une propriété Formula de Range que je n'avais pas compris quoi…

P.S. Au fait, pourquoi voulez vous passer par un userform pour renseigner le glossaire ?
Peut être que ce serait plus simple d'assister la saisie directe dans la feuille par une macro derrière.
je crois que je vais prendre la chose en main parce que je vois que vous ne vous en sortez pas.
Mais mettez enfin quelque chose dans cette foutue cellule P5 ! Dans votre dernier classeur joint il n'y avait rien dedans. Des essais que je commence vaguement donnent donc toujours encore "[]X_001_Intitulé_1"
Comme c'est le cas de cette macro par exemple qui ne vous semble pas prometteuse ? :
VB:
Sub Macro1()
Feuil1.Range("E7:E" & Feuil1.[B65536].End(xlUp).Row).FormulaR1C1 = _
   "=HYPERLINK(""[""&R5C16&""]""&INDEX(Macros!R2C2:R9C2,MATCH(RC3,Macros!R2C1:R9C1,0))&""_""&SUBSTITUTE(RC4,"" "",""_""))"
End Sub
Vous pourriez mettre de validations de données dans la feuille pour faciliter et limiter la saisie à ce qui est prévu dans la feuille "Macros" (ou "Explication" ? Il y a une liste de métiers en plus)

P.S.2 Est-ce que par hasard le fichier s'appellerait toujours "Glossaire.Docx" et serait sur le même dossier que le classeur Excel ?
Vous savez, ce n'est pas si facile de comprendre ce que vous voulez exactement avec tout ça. Dans tous les cas vous auriez intérêt à mettre au point à la main une formule =LIEN_HYPERTEXTE(… qui marche comme vous voulez, me la communiquer (puisque vous ne savez pas faire engendrer par l'enregistreur de macro l'instruction qui l'installe quand vous faites des manoeuvres dans Excel. Comment croyez vous pourtant que je vous ai servi le code proposé en encadré ?…)
Si ma dernière hypothèse est juste ça pourrait être :
VB:
Sub Macro2()
Feuil1.Range("E7:E" & Feuil1.[B65536].End(xlUp).Row).FormulaR1C1 = "=HYPERLINK(""[" & ThisWorkbook.Path & _
   "\Glossaire.docx]""&INDEX(Macros!R2C2:R9C2,MATCH(RC3,Macros!R2C1:R9C1,0))&""_""&SUBSTITUTE(RC4,"" "",""_""))"
End Sub
À mettre dans un module ordinaire, ces macros, bien entendu, pas dans l'userfom, dont je doute de l'utilité pour l'instant.

À +
 
Dernière édition:

Malcomiix

XLDnaute Nouveau
Re : Intégration d'une variable dans une fonction.

Bonjour cher XLDiens XLDiennes :)

Je reviens vers vous après le travail remarquable de Dranred ! (Respect ^^')

J'aurais voulus du savoir si il était possible de générer un document word reprenant le tableau qui est assigné au signet word. Qui lui est donc repertorié dans mon lien_hypertexte. (j'ai explorer l'insertion d'objet/texte d'un fichier: c'est ce que je veut mais automatisé ^^') ([auto break]il est chiant ce malcomiix /[auto break])

De la façon suivante, j'ai rajouté une colonne qui permettra à l'utilisateur de mettre tout simplement une "X". La macro devant scanner cette colonne pour savoir quels éléments sont à intégrer à ce fichier word en question.

J'ai essayer plusieurs bout de code mais sans résultat flagrants ....

Au plaisir d'avoir à faire à vous !!

Sur ce bonne journée ! Et que la semaine soit bonne pour vous :)

Je met en PJ les dernières versions de ces deux fichier !

Cordialement.

Malcomiix in da mix :D
 

Pièces jointes

  • Glossaire XLD.xlsm
    48 KB · Affichages: 34
  • Glossaire XLD.docx
    38.7 KB · Affichages: 36
  • Glossaire XLD.xlsm
    48 KB · Affichages: 42
  • Glossaire XLD.docx
    38.7 KB · Affichages: 36
  • Glossaire XLD.xlsm
    48 KB · Affichages: 33
  • Glossaire XLD.docx
    38.7 KB · Affichages: 36

Malcomiix

XLDnaute Nouveau
Re : Intégration d'une variable dans une fonction.

Enfaite, l'utilisateur doit exporter le contenue du tableau(contenue sous Word) donc le contenue du signet qui est dans le lien hypertexte dans l'avant dernière colonne (Liens).

La personne "Coche" en écrivant un X, un symbole ou autre les points qu'il devra mettre dans son format Word.
Donc, si il as 25 lignes à exporter vers le fichier word, il coche 25 croix ou rond dans la dernière colonne et via ce "cochage" la macro viens récupérer les / la lignes "coché(s)" se décale d'une colonne sur la gauche (Colonne Liens) et récupère le / les signet(s)contenue dans la formule lien_hypertexte et l'/ les insert sur le document Word .

Dite moi si je suis pas clair dans mes propos ^^ !

Sur ce bonne soirée à vous tous !
 

Dranreb

XLDnaute Barbatruc
Re : Intégration d'une variable dans une fonction.

Oui mais encore une fois je ne sais pas écrire de macro dans Word.
Tout ce que je pourrais faire c'est envoyer dans le presse papier les signets qui n'ont pas la cellule de cette colonne vide, séparés par des CrLf.
 

Malcomiix

XLDnaute Nouveau
Re : Intégration d'une variable dans une fonction.

J'aimerais avoir du coup l'avis d'une personnes qui connais le vba aussi bien sur word qu'excel pour savoir si mon application est possible et donc réalisable ... Car si je ne peut la réaliser autant que je change de logiciel qui sera adapter :) !!

Access étant peut être la solution mais vu le boulot deja fournis sur word et excel sa m'embêterais de devoir recommencer ou adapter sa pour Access ...

Contacter moi par email ou par le forum.

Merci d'avance.


Cordialement.
 

Discussions similaires

Réponses
4
Affichages
455

Statistiques des forums

Discussions
315 133
Messages
2 116 603
Membres
112 802
dernier inscrit
Dan Marc