[Excel/VBA] Fenêtre d'assistance aux formules

Résolu
cs_nico39 Messages postés 56 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 4 octobre 2006 - 19 sept. 2006 à 15:15
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 11 oct. 2006 à 15:24
Bonjour,

je souhaite rendre un de mes programmes sous Excel les plus "flexibles" possibles, et souhaiterais savoir comment récupérer les coordonnées d'une cellule (ou zone de cellule) sélectionnée par l'utilisateur.
J'avais dans l'esprit d'utiliser la fenêtre d'assistance qui apparaît lorsque qu'on écrit une formule sous Excel (celle(s) où on vous demande quelles cellules sont concernées par la formule et où on peut sélectionner avec la souris la zone choisie).
Je souhaiterais alors connaître la (les) commande(s) permettant d'utiliser cette fenêtre, c-à-d de la faire apparaître, de choisir son titre et commentaire,  et de récupérer les coordonnées des cellules choisies par l'utlisateur.

J'avais pensé regardé quelquechose comme Application.GetCells (comme il existe Application.GetOpenFileName pour les dossiers à ouvrir), mais sans succès.

Quelqu'un aurait-il une idée? 
Merci d'avance.

Nicolas.
Amateurement vôtre... 

7 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
22 sept. 2006 à 16:41
Oui, effectivement, je me suis loupé, il faut faire ceci :

Set rMaPlage = Range(RefEdit1.Value)

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
19 sept. 2006 à 16:34
Salut,

pour la sélection d'une plage cellule par un utilisateur, il faut rajouter le composant RefEdit.


Le mieux, c'est de le placer sur un UserForm, tu y places aussi un textbox où l'utilisateur mettra son titre.


Pour des exemples de UserForm avec RefEdit, n'hésite pas à éplucher ma source

@++





<hr width="100%" size="2" />

  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
cs_nico39 Messages postés 56 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 4 octobre 2006
21 sept. 2006 à 11:52
Bonjour,

Merci Mortalino pour ta réponse.

J'ai essayé ta méthode: j'ai créé un petit UserForm avec un RefEdit, qui récupère les coordonnées d'une cellule (ou d'un groupe de) sélectionnée. Tout marche bien, mais je n'arrive pas à faire passer les données récupérées dans mon programme principal (qui est sur un autre module).

Je n'ai ni envie de recopier tout mon programme dans le module de l'UserForm, ni de couper mon programme principal en deux sous-programmes, dont l'un récupérerait en argument ces données et continuerait le programme.
J'ai essayé de déclarer une variable globale, qui prend sa valeur dans le module de l'UserForm et qui est utilisée ensuite dans le reste des autres modules. Mais cette dernière solution ne semble pas marcher: la variable n'a pas (ou plus) de valeur dans mon module principal alors qu'elle en avait une dans le module du UserForm.

Aurais-tu une idée pour un passage de paramètres de mon UserForm à mon programme principal ?

Merci encore pour ton aide.

A+
Nicolas.

P.S.: je n'ai pas encore pu lire ton code sur les UserForms et les RefEdit.



Amateurement vôtre... 
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
21 sept. 2006 à 12:24
Dim rMaPlage As Range

rMaPlage = RefEdit1.Value

ça devrait le faire

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_nico39 Messages postés 56 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 4 octobre 2006
22 sept. 2006 à 11:00
Salut Mortalino,

Merci pour la réponse. J'arrive maintenant à récupérer la valeur de mon RefEdit dans ma macro principale. Seulement, l'adresse recueillie est du format : Feuil1!$A$1. Je ne peux donc pas l'appliquer directement dans un Range("" & RefEdit1.Value & ""): une erreur 404 survient. De plus, ta méthode (même avec le Set devant) ne fonctionne pas: objet non défini pour rMaPlage .
Y a-t-il un paramétrage à faire dans le contrôle RefEdit ou faut-il se créer une 'tite fonction, pour séparer nom de feuille et coordonnées de cellule et définir ainsi correctement un Range 

A+
Nicolas.



Amateurement vôtre... 
0
cs_nico39 Messages postés 56 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 4 octobre 2006
25 sept. 2006 à 08:49
Merci Mortalino.


Ta méthode fonctionne très bien.
Pour info, pour récupérer séparés nom de feuille et coordonnées de cellule, voici une petite fonction:

Dans le code:
...
reference = RefEdit1.Value
Set c = Worksheets(GetStringPart(reference, "!", 1)).Range(GetStringPart(reference, "!", 2))
...
End sub

'Fonction pour récupérer une partie d'une chaîne de caractère
Function GetStringPart(strInput As String, strDelimiter As String, intPart As Integer) As String



Dim varStrings As Variant
   
    varStrings = Split(strInput, strDelimiter, -1, vbBinaryCompare)
    On Error Resume Next
    GetStringPart = Trim(varStrings(intPart - 1))
    On Error GoTo 0



End Function


Encore merci pour la solution.



Amateurement vôtre... 
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
11 oct. 2006 à 15:24
Salut,

solution alternative pour ta fonction :




    Dim MaChaine()  As String
    Dim NomFeuille  As String
    Dim Plage       As String

MaChaine =  Split(Me.RefEdit1.Value, "!")
NomFeuille = MaChaine(0)
Plage = MaChaine(1)

MsgBox NomFeuille & "--" & Plage







<small>Coloration syntaxique automatique [mortalino] </small>

       






@++





<hr width ="100%" size="2" />

  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0