Créer fonction xlam sans liaison

osiris79

XLDnaute Nouveau
Bonjour à tous,

J'ai crée ma première fonction dans un fichier xlam dans le but de l'utiliser dans différentes cellules excel.
Cette fonction ressemble à ça :
Code:
Function RDM(CAS As Integer, E As Double, I As Double, Q As Variant, L As Variant, Resultat As String) As Double

    Application.Volatile
    'Beaucoup de calculs compliqués à partir des différentes variables
    RDM = Quelquechose
    
End Function
Cette fonction est enregistré dans un fichier RDM.xlam qui est soigneusement rangé dans C:/user/.../AppData/Roaming/Microsoft/AddIns/

Jusque la tout va bien, je l'active dans les macros complémentaire et je peux utiliser cette fonction dans n'importe quel fichier excel en tapant la formule =RDM(gnagnagna). C'est trop bien.

Malheureusement lorsque je vais dans données/connexions/modifier les liens, je me rends compte qu'une liaison a été créée:
Source: RDM.xlam
Emplacement: C:/Users/.../AppData/Roaming/Microsoft/AddIns/

Resultat, lorsque je vais sur un autre ordinateur, que je charge correctement le fichier RDM.xlam dans les compléments excel, et que j'ouvre une fichier xlsx qui utilise la fonction RDM(gnagna), j'ai un message d'erreur de liaison, il faut les mettre à jour ou quelques chose. Simplement parce que le "user" s’appelle "bureau" au lieu de "maison" par exemple.
Si je fais ignorer les liaisons par exemple, je me rends compte que chaque cellule utilisant la fonction est écrite de la façon suivante:
='C:/Users/.../AppData/Roaming/Microsoft/AddIns/!RDM(gnagna)'

Ma question: comment créer une fonction sans créer de liaison au fichier xlam ?

Merci de votre attention.
 

Dranreb

XLDnaute Barbatruc
Re : Créer fonction xlam sans liaison

Bonjour.

Je pense que c'est rigoureusement impossible, que ça n'a même pas de sens.
Enregistrez une nouvelle macro, pendant que ça enregistre, modifiez la liaison.
Inspirez vous du code engendré pour rectifier la liaison automatiquement à l'ouverture du fichier en fonction de son Path.
Méthodes en rapport: LinkSources et ChangeLink.
[h=1]LinkSources, méthode[/h] Voir aussi S'applique à Exemple Spécificités
Cette méthode renvoie un tableau de liaisons dans le classeur. Les noms contenus dans le tableau sont ceux des documents, éditions ou serveurs DDE ou OLE liés. Cette méthode renvoie la valeur Empty s'il n'existe aucune liaison. Méthode de type Variant.
expression.LinkSources(Type)

expression Obligatoire. Expression qui renvoie un des objets répertoriés dans la liste S'applique à.
Type Argument XlLink facultatif. Type de liaison à renvoyer.
XlLink peut être l'une de ces constantes XlLink.
xlExcelLinks
xlOLELinks (gère également des liaisons DDE) xlPublishers
xlSubscribers


[h=2]Notes[/h] Le tableau est à une dimension pour tous les types, quel que soit le type de liaisons, à l'exception de la publication et de l'abonnement. Les chaînes de caractères renvoyées contiennent le nom de la source de la liaison dans la notation appropriée au type de liaison. Par exemple, les liaisons DDE utilisent la syntaxe « Server|Document!Item ».
Pour les liaisons de publication et d'abonnement, le tableau renvoyé est à double entrée. La première colonne du tableau contient les noms de la publication et la seconde colonne, les références des éditions sous la forme de texte.
[h=2]Exemple[/h] Cet exemple montre comment afficher une liste de liaisons OLE et DDE dans le classeur actif. Il doit être exécuté sur un classeur qui contient un ou plusieurs objets Word liés.

aLinks = ActiveWorkbook.LinkSources(xlOLELinks) If Not IsEmpty(aLinks) Then For i = 1 To UBound(aLinks) MsgBox "Link " & i & ":" & Chr(13) & aLinks(i) Next i End If
[h=1]ChangeLink, méthode[/h] Voir aussi S'applique à Exemple Spécificités
Modifie une liaison entre deux documents.
expression.ChangeLink(Name, NewName, Type)

expression Obligatoire. Expression qui renvoie un des objets répertoriés dans la liste S'applique à.
Name Argument de type String obligatoire. Nom du lien Microsoft Excel ou DDE/OLE à modifier, tel qu'il a été renvoyé à partir de la méthode LinkSources.
NewName Argument de type String obligatoire. Nouveau nom du lien.
Type Argument XlLinkType facultatif. Type de lien.
XlLinkType peut être l'une de ces constantes XlLinkType.
xlLinkTypeExcelLinks par défaut
xlLinkTypeOLELinks. Utilisez cette constante pour les liens DDE et OLE.


[h=2]Exemple[/h] Cet exemple montre comment modifier une liaison Microsoft Excel.

ActiveWorkbook.ChangeLink "c:\excel\book1.xls", _ "c:\excel\book2.xls", xlExcelLinks
Le type à employer dans votre cas est xlExcelLinks
 
Dernière édition:

osiris79

XLDnaute Nouveau
Re : Créer fonction xlam sans liaison

Bonjour,

Tout d'abord merci de vous être penché sur mon problème.

Ce que je ne comprends pas c'est pourquoi mes fonctions ont des liaisons alors que les fonctions complémentaires "Morefunc" par exemple n'en ont pas ?
Lorsque j'écris =DECALERFEUILLE(gnagna), il n'y as pas de nouvelle liaison de créée.
Lorsque j'écris =RDM(gnagna), une nouvelle liaison est créée.

Si j'utilise LinkSources et ChangeLink à l'ouverture des fichiers, il faut donc que chaque fichier soit en xlsm, ce qui n'est pas le but recherché.
Une solution plus simple serait de placer le fichier xlam dans C:\fonctions\RDM.xlam sur chaque ordinateur. De cette façon le nom d'utilisateur ne posera plus de problème.
Mais avec ces deux solutions, on contourne le problème.

Quel est donc la différence entre une fonction complémentaire morefunc et ma fonction complémentaire personnelle ?

Je me dis peut être naïvement qu'une fonction n'a pas de liaison. Pour moi, lorsque j'écris une fonction dans une cellule, excel recherche la correspondance à cette fonction, si il ne trouve rien il écrit #VALEUR!
Par exemple, si j'écris =DECALERFUEILLE(gnagna) il affiche un résultat. Si je désactive le module complémentaire Morefunc, il affiche #VALEUR!

Merci
 

Dranreb

XLDnaute Barbatruc
Re : Créer fonction xlam sans liaison

J'avoue que vous me posez une colle. Dans ma version je ne connais que xls. C'est comme si tout était d'office xlsm et c'est très bien comme ça. J'ignore comment se fait le lien avec un classeur de macro complémentaire fourni, s'il ne donne pas lieu à une liaison. Il y a bien la mise en référence du projet VBA du complément, mais elle ne touche à ma connaissance que les utilisations VBA.
 

Discussions similaires

Réponses
2
Affichages
1 K

Statistiques des forums

Discussions
312 323
Messages
2 087 297
Membres
103 511
dernier inscrit
mickael.das