Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Rendre une macro interactive

  • Initiateur de la discussion Initiateur de la discussion KIM
  • 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 !

KIM

XLDnaute Accro
Bonjour le forum & les ami(e)s,
J'ai une macro qui extrait la liste sans doublons d'une colonne donnée et la recopie dans un autre endroit.
J'ai besoin de votre aide pour rendre interactif cette macro c-à-d à l'exécution la macro doit me demander la colonne de départ, la ligne de départ (cela définit la 1ere cellule des données source), la colonne cible et la ligne cible. Cela m'évite de modifier la macro à chaque modification de mes données source et cible.
Merci d'avance de votre aide
KIM
 

Pièces jointes

Re : Rendre une macro interactive

Bonjour,

Voici une proposition avec Application.InputBox. L'utilisateur doit cliquer sur la cellule de départ et de destination.

Code:
Sub Liste_SDB_v02()
'
' extraction_sansdoublons Macro
'

'
'Sheets("Ref").Select
Dim pSource As Range, pDestination As Range
Set pSource = Application.InputBox("1re cellule source?", , , , , , , 8)
Set pDestination = Application.InputBox("Cellule Destination?", , , , , , , 8)


'    Range("l_Bunites").ClearContents
    derniereligne = pSource.Offset(30000, 0).End(xlUp).Row
    pDestination.Resize(65536 - pDestination.Row).ClearContents
    pSource.Resize(derniereligne - pSource.Row).AdvancedFilter Action:=xlFilterCopy, _
        CopyToRange:=pDestination, Unique:=True
    
'    Range("l_Bunites").Select
    pDestination.Resize(65536 - pDestination.Row).Select
    Selection.Sort Key1:=pDestination, Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Application.CutCopyMode = False
    pDestination.Select
    
'    Sheets("Ref").Select
End Sub

A+
 
Re : Rendre une macro interactive

Merci Grand Chaman Excel,
Cela fonctionne
par contre peux m'expliquer cette ligne :
derniereligne = pSource.Offset(30000, 0).End(xlUp).Row
Merci d'avance
KIM
 
Re : Rendre une macro interactive

Bonjour,
C'est pour trouver la dernière ligne. En ayant comme 1re cellule "pSource", on décale de 30000 lignes vers le bas et ensuite on remonte vers le haut pour trouver la dernière ligne. J'ai mis 30000 mais ça pourrait être autre chose. Par contre si tu mets un chiffre trop grand (exemple 60000) et qu'en décalant tu te retrouves > que 65536 alors il y aura une erreur car il n'y a que 65536 dans Excel 2003.

Exemple : si pSource = A10, on décale à A30010 et on revient à la dernière ligne de ta liste, disons A242.
 
Re : Rendre une macro interactive

Bonjour Grand Chaman Excel, et le forum,
Comment je epux intégrer dans ta macro le choix préalable d'une feuillendu classeur, ensuite sélectionner la cellule de départ et la cellule de destination qui peut être sur une autre feuille?
Merci de votre aide
KIM
 

Pièces jointes

Re : Rendre une macro interactive

Bonjour Kim,

Je ne suis pas sûr de comprendre ta question. Quand on exécute la macro à partir de ta feuille "Menu", on peut changer d'onglet pour choisir la 1re cellule source et ensuite encore changer d'onglet pour la cellule destination.

Si tu connais exactement la feuille de départ, tu pourrais ajouter ceci en début de code :

Code:
Sheets("KLMN").Activate     'Choisi la feuille KLMN avant d'afficher le input box

Sinon, peut-être passer par une "formulaire" avec une liste déroulante contenant les feuilles de ton classeur ?

A préciser

note : j'ai corrigé la macro et ajouté 2 lignes au début et à la fin pour éviter les erreurs.

A+
 

Pièces jointes

Re : Rendre une macro interactive

Bonsoir Grand Chaman Excel, et le forum,
En effet, je ne souhaite pas mettre en dur le nom de la feuille "Sheets("KLMN").Activate ", parcontre je souhaite sélectionner une feuille parmis les feuilles du classeur dans une liste déroulante par exemple, la rendre active, et ensuite sélectionner la cellule de départ et celle de destination.
Merci d'avance
KIM
 
Re : Rendre une macro interactive

Bonsoir,
En effet, je ne souhaite pas mettre en dur le nom de la feuille...
Je ne omprends pas le pb...
Code:
Sub Liste_SDB_v02()
Dim S As Range, D As Range
On Error Resume Next
Set S = Application.InputBox(Prompt:="Source?", Type:=8)
Set D = Application.InputBox(Prompt:="Destination?", Type:=8)
If S Is Nothing Or D Is Nothing Then Exit Sub
On Error GoTo 0
S.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=D, Unique:=True
D.Resize(S.Count, 1).Sort Key1:=D, Order1:=xlAscending, Header:=xlGuess
End Sub
...il suffit de sélectionner la plage à filtrer et la cellule de destination...
A+
kjin
 
Re : Rendre une macro interactive

Bonjour Grand Chaman Excel, Kjin & le forum,
Merci pour votre aide, cela fonctionne et J'ai appris avec vous l'utilisation de Application.InputBox.
L'utilisation d'un userform m'oblige à l'exporter et l'importer dans un autre classeur.
Est-il possible d'utiliser Application.InputBox dans le choix de la feuille source? Car je souhaite approfondir cette méthode d'initialiser par saisie des variables dans une macro, une technique que je souhaite apprendre pour l'utiliser dans d'autres macros et ainsi je n'ai qu'à recopier la macro telle quelle dans un autre classeur.
Merci d'avance
KIM
 
Re : Rendre une macro interactive

Bonjour,
Est-il possible d'utiliser Application.InputBox dans le choix de la feuille source?
Et il fait quoi le code que je t'ai proposé ?! le type 8 indique que la valeur renvoyée est une variable de type range (il faut donc sélectionner une cellule) et de fait la variable contient le nom de feuille si ce n'est pas la feuille active;Peut-être faut-il modifier le message comme ceci
VB:
Sub Liste_SDB_v02()
Dim S As Range, D As Range
On Error Resume Next
Set S = Application.InputBox(Prompt:="Clicker sur la cellule source", Type:=8)
Set D = Application.InputBox(Prompt:="Clicker sur la cellule de destination", Type:=8)
If S Is Nothing Or D Is Nothing Then Exit Sub
On Error GoTo 0
S.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=D, Unique:=True
D.Resize(S.Count, 1).Sort Key1:=D, Order1:=xlAscending, Header:=xlGuess
End Sub
A+
kjin
 
Re : Rendre une macro interactive

Bonjour le fil,
@kjin,
Toutes mes excuses si je n'ai pas été clair.
J'ai compris ta macro et son focntionnement. Il n'y a pas d'ambiguité.
Dans d'autres contextes j'ai besoin de rendre la feuille comme variable et la sélectionner comme pour la cellule source et la cellule destination dans ta macro. Mon but est d'alimenter une variable avec le nom d'une feuille sélectionnée. Est-ce possible? La modification dans l'exemple actuel me permet seulement de connaitre l'astuce.
Merci d'avance
KIM
 
Re : Rendre une macro interactive

Re,
Code:
Sub selfeuille()
Dim S As Range
On Error Resume Next
Set S = Application.InputBox(Prompt:="Clicker sur une cellule de la feuille source", Type:=8)
If S Is Nothing Then Exit Sub
MsgBox S.Parent.Name
End Sub
A+
kjin
 
Re : Rendre une macro interactive

Re,
@kjin,
Effectivement, je cherchais comment reconnaître le nom de la feuille sélectionnée.
je vais tester la référence S.Parent.Name dans une de mes macros.

Merci kjin, Grand Chaman Excel et le forum
A bientôt

KIM
 
- 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
7
Affichages
483
Réponses
9
Affichages
884
  • Question Question
Microsoft 365 Bug sur une macro
Réponses
6
Affichages
463
Réponses
5
Affichages
325
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…