• Initiateur de la discussion Initiateur de la discussion Jam
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Jam

XLDnaute Accro
Bonjour à tous,

J'ai une fonction qui découpe le contenu d'une fonction de cellule afin d'en extraire les différents paramètres. Jusque là pas de problème.
En fait, si j'utilise un nom dans la formule je ne peux plus interpréter la référence. Je souhaiterai savoir si quelqu'un aurait une chtite soluce afin de déterminer si la valeur renvoyée est un nom ou une référence ?
Les données:
Code:
'la cellule A1 contient la formule suivante =maformule(A12;unNom)
'la cellule A12 contient la valeur 25
'le nom unNom a pour valeur: 2007
Le code:
Code:
Sub CellRef(cellformula as string)
Dim Params
'découpage et stockage des éléments de la formule dans le tableau Params
Params = Split(cellformula, "(")
Params = Split(Left$(Params(1), Len(Params(1)) - 1), ",")
'-> Mon problème est ici:
x1=Range(Params(0)).Value '<-Pas de problème il me renvoi bien 25
x2=Range(Params(1)).Value '<- Error 1004 car il s'agit d'une string au lieu d'une réf
Je peux éventuellement utiliser le code suivant:
Code:
range(names(Params(1).Value).RefersTo).Value
Mais celui-ci ne me permet pas de tester s'il s'agit vraiment d'un nom. Il faut donc que je développe une procédure qui teste s'il s'agit bien d'un nom...bref cela ne me paraît pas bien performant or je veux traiter de nombreuses formules et cela ne doit pas être trop consomateur de ressource.
En fait je me demandais s'il n'existait pas une formule du genre IsName() ou un code simpe à utiliser.

Merci d'avance pour vos idées.
 
Re : isname()

Bonjour Jam

je ne sais pas si j'ai bien compris, mais regarde peut être le code ci dessous :

Code:
Sub test()
Dim n As Name
For Each n In ActiveWorkbook.Names
    If InStr(1, Range("A1").Formula, n.Name) <> 0 Then
        MsgBox "ok, il s'agit d'un nom"
        Exit For
    End If
Next n
End Sub

bonne soirée
@+
 
Re : isname()

bonjour Jam

le 2eme split doit se faire avec ; et non ,

ceci fonctionne chez moi

Code:
Dim Params
'découpage et stockage des éléments de la formule dans le tableau Params
Params = Split(cellformula, "(")
Params = Split(Left$(Params(1), Len(Params(1)) - 1), ";")
MsgBox (Params(0) & "  " & Params(1))
'-> Mon problème est ici:
x1 = Range(Params(0)).Value '<-Pas de problème il me renvoi bien 25
x2 = Range(Params(1)).Value '<- Error 1004 car il s'agit d'une string au lieu d'une réf

avais pas rafraichi

Salut Pierrot
Salut Spitnolan08
 
Re : isname()

Salut Pierrot, PierreJean, Spitnolan08,

- PierreJean: Je n'ai pas de problème avec Params() mais avec l'interprétation du contenu
- Spitnolan08: en fait je ne cherche pas à savoir le type de la variable mais son contenu.
- Pierrot: Ta soluce est intéressante. Je pense que je vais l'exploiter différemment en fait. Au lieu de tester s'il s'agit d'un nom, je vais attendre l'erreur, tester s'il s'agit d'un nom, sinon sortir ! Cela devrait me faire gagner du temps plutôt que de tester systématiquement chaque occurence.

Pour PierreJean et Spitnolan08, comme je n'ai pas forcément été très clair à l'origine, la fonction a pour but de découper une formule et de récupérer les différents éléments qui la compose afin de réutiliser ces différentes valeur (en l'occurrence pour constituer les critères d'une requête SQL).
Ex.: =maformule(A1;A2;C4;C6)
dans Params j'aurai pour A1 la valeur "Toto", dans A2 "Tata" etc. Or si dans la fonction il y a un nom en lieu et place d'une référence de cellule j'ai un plantage 1004 parce qu'il ne s'agit pas d'une référence mais d'un nom.

Merci pour vos contribs.
 
Re : isname()

Pierre Jean, merci de ton insistance,

En fait le problème ne vient pas du nom ni de la virgule dans la fonction split ! En fait lorsque j'ai testé ma fonction celle-ci contenait un texte (ex.: =maformule(A1;"Hello";unNom). L'erreur ne se produisait pas sur unNom mais sur "Hello" !!!
Ce qui m'a induit en erreur c'est le debugger qui m'indiquait bien l'interprétation de la variable comme une 'string' or il aurait fallut que cela soit une réf !

Bref, ton insistance m'a donc permis de comprendre que mon erreur n'était pas là où je la croyais 🙁
D'un côté cela m'arrange car je n'aurais pas à traiter le nom, par contre il va falloir que je gère les 'string' !

Merci Pierre Jean
 
Re : isname()

bonsoir

Si la fonction et les références de cellules sont dans la même feuille, as tu essayé d'utiliser simplement la propriété Precedents:

Code:
Dim Cell As Range
 
'La formule est en C2
For Each Cell In Range("C2").Precedents
    MsgBox Cell.Value
Next Cell


Bon week end
MichelXld
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
11
Affichages
229
Réponses
1
Affichages
221
Réponses
2
Affichages
247
Retour