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

[Résolu]
Signaler
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
4 octobre 2006
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
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

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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>
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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>
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
4 octobre 2006

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... 
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Dim rMaPlage As Range

rMaPlage = RefEdit1.Value

ça devrait le faire

++
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
4 octobre 2006

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... 
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
4 octobre 2006

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... 
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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>