web-dev-qa-db-fra.com

Utilisation de VBA pour inviter l’utilisateur à sélectionner des cellules (éventuellement sur une autre feuille)

Je travaille dans Excel sur un projet VBA et je souhaite qu'une partie de ma macro demande à l'utilisateur de sélectionner une plage de cellules * avec laquelle la macro peut ultérieurement effectuer des tâches.

* Le type d'invite que vous obtenez lors de la création d'un graphique ou de l'utilisation d'une interface graphique pour insérer une fonction 

par exemple. ici: Screengrab showing required functionality - the Excel 'Sum' Function Arguments pop-up

et ici:Screengrab showing required functionality - the Excel Function Arguments pop-up

Je suis donc à la recherche de quelque chose du genre

Sub MyMacro()
    MsgBox "Please select data range"

    ' allow user to select range (as images above)
    CreateFunctionArgumentsPrompt()    

    'do stuff with user selected range of cells
    ...
End Sub

Est-il possible d'accéder aux fonctionnalités intégrées d'Excel pour effectuer ce que j'appelle: CreateFunctionArgumentsPrompt()

Remarque: Ceci est similaire à SO question Excel vba obtient la plage de la plage sélectionnée par l'utilisateur à l'aide de la souris mais diffère en ce que

  1. Je souhaite utiliser la fonctionnalité d'interface graphique intégrée d'Excel présentée ci-dessus
  2. Je dois pouvoir sélectionner et faire référence à une plage d'une feuille autre que la feuille de calcul active.
12
Jonny

Cela n'utilise pas la structure que vous avez indiquée ci-dessus, mais vous permet de sélectionner une plage de cellules à la suite d'une invite de revenus

Sub RangeSelectionPrompt()
    Dim rng As Range
    Set rng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8)

    MsgBox "The cells selected were " & rng.Address
End Sub

Ceci est basé sur la réponse donnée dans cette réponse de MrExcel .

Voici à quoi ça ressemble en cours d'utilisation:

enter image description here

23
ChrisProsser

Ce que vous recherchez, c'est une boîte de dialogue (également appelée boîte de dialogue commune). Malheureusement, vous ne pouvez pas en ajouter un aux objets intégrés existants (du moins sans utiliser VBA).

Comme mentionné ci-dessus, vous pouvez reproduire cette fonctionnalité à l'aide de InputBox et Forms. Cela dit, j'ai vu des programmes propriétaires basés sur Excel, dans lesquels la société a ajouté le type de fonctionnalité que vous décrivez. Cependant, je crois que vous devez utiliser C++ ou un langage plus profond pour créer des DLL pouvant accomplir cela.

Une chose à noter à propos des boîtes de dialogue: Excel a une bibliothèque intégrée Boîte de dialogue de fichier commune qui vous permet de créer des boîtes de dialogue de serveur de fichiers communes (telles que Ouvrir, Enregistrer et sélectionner) à l'aide des boîtes de dialogue API Windows existantes.

0
DanK