IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Récupération de la sélection par la souris [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 274
    Par défaut Récupération de la sélection par la souris
    Bonjour


    Je voudrai sélectionner une plage de cellule avec la souris et récupérer cette plage dans une macro, je sais faire lorsque une cellule est sélectionnée

    Par exemple je sélectionne B2:H8 avec la souris, je lance une macro et je voudrai récupérer en début de macro l'équivalent de

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 552
    Par défaut
    Bonjour

    Selection renvoie la plage sélectionnée qu'elle corresponde à 1 ou n cellules

    Pour l'utiliser dans la suite du code il est utile de créer une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim LaSelection as Range
     
    Set LaSelection =Selection

  3. #3
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 274
    Par défaut
    Merci

    mais peut-on récupérer les valeurs des cellules (ou lignes) de la sélection du style ("B2:H8") ou 2;8 peut importe la forme car j'ai des calculs à faire sur les N° de ligne de la plage

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    Chris t'a donné la solution. Pour autant que Selection soit un objet Range (ce qui n'est pas obligatoirement le cas), tu le manipules comme un objet Range. Et tu peux, comme l'illustre Chris, affecter la sélection à une variable Range pour la "figer".

    Nom : 2020-11-08_111841.png
Affichages : 2431
Taille : 13,9 Ko


    Ceci dit, si tu nous disais ce que tu souhaites faire (et pas comment le faire), nous pourrions probablement mieux t'aider.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 274
    Par défaut
    Bonjour Pierre, merci Chris,

    j'ai écris une petite macro pour déplacer des lignes dans une feuille et déplacer automatiquement les lignes correspondantes dans 3 autres feuilles :

    1) Msgbox pour avoir le N° de la 1ere ligne
    2) Msgbox pour avoir le nombre de lignes à déplacer
    3) Msgbox pour avoir le N° de la 1ere ligne réceptrice

    Je passe les contrôles pour vérifier (lignes réceptrice vides, dans la plage ligne 4 à ligne 42, calcul de la dernière ligne, etc)

    4) copie des plages voulues par exemple "B & 1ere ligne : H & dernière ligne"
    5) Effacement des lignes d'origine
    6) la même chose sur 3 autres feuilles avec calcul de la 1ere ligne (+- x par rapport à la 1ere ligne de la 1ere feuille)

    Ma macro marche très bien, mais je voudrai optimiser le travail de l'utilisateur en remplaçant les msgbox 1 et 2 en lui demandant de sélectionner la plage voulue (éventuellement les lignes) et en récupérant la sélection (lui afficher juste la msgbox 3)

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tu pourrais utiliser Application.InputBox avec Type:=8 pour permettre la sélection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub MoveSeletion()
      Dim Target As Range
     
      If TypeName(Selection) = "Range" Then
        Set Target = Application.InputBox(prompt:="Choisissez la cellule d'arrivée", Title:="Déplacement de sélection", Type:=8)
        Selection.Cut Destination:=Target
      Else
        MsgBox "La sélection doit être une plage de cellules", vbExclamation
      End If
    End Sub
    Nom : 2020-11-08_120549.png
Affichages : 2045
Taille : 13,6 Ko


    Ceci dit, Un simple clic droit "Couper" fait parfaitement l'affaire. Je veux bien qu'on aide un utilisateur pour des manipulations "complexes", mais un Ctrl+X -> Ctrl+V ou un couper-coller, c'est la base des bases et je ne peux comprendre que l'on doive réaliser cela par VBA...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 274
    Par défaut
    un couper-coller, c'est la base des bases et je ne peux comprendre que l'on doive réaliser cela par VBA...
    Tout à fait d'accord mais c'est la répercussion du couper/coller dans les autres feuilles que je veux surtout traiter par la macro.

    Déplacer les lignes 3 et 4 en ligne 10 de la feuille 1 implique un déplacement des lignes 5 et 6 en ligne 11 de la feuille 2, des lignes 3 et 4 en ligne 10 de la feuille 3, lignes 5 et 6 en ligne 11 de la feuille 4...

    Je ne vois pas comment faire autrement que par macro, le risque d'erreur et d'oubli est important à la main par couper/coller dans chaque feuille (point 6 de mon #5)

    Je viens d'essayer ta suggestion (#6), c'est vrai que c'est performant, le petit soucis est qu'en A1 à B3 je peux avoir des formules et elles sont effacées après l'exécution de la macro et que cela ne récupère pas les N° de lignes pour ensuite calculer les N° de lignes dans les autres feuilles

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    La macro proposée réalise un couper-coller, donc les formules sont copiées. Evidemment, il faut qu'elles soient rédigées selon les règles (références absolues ou relatives, références structurées, ...).

    Tu demandes qu'on puisse partir d'une sélection pour déplacer les cellules dans un autre emplacement et ma macro permet cela, même sur une autre feuille, et en déplaçant les formules, qui doivent évidemment être bien rédigées.

    Comme je l'ai déjà dit dans beaucoup de discussions relatives à ce que tu mets en place, tu crées l'usine à gaz en essayant de reprogrammer Excel pour créer une application "Canada Dry" (ça a la couleur de l'excel, ça ressemble à Excel, on fait comme dans Excel), mais ça plantouille à tout va.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 274
    Par défaut
    Oui alors dis moi comment ferais tu pour :

    Déplacer par Excel sans VBA les lignes 3 et 4 en ligne 10 de la feuille en cours et automatiquement déplacer les lignes correspondantes par exemple les lignes 5 et 6 en ligne 11 de la feuille 2

    Je t'avoue que je sais que tu as raison mais je sèche...

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    [...]
    Déplacer par Excel sans VBA les lignes 3 et 4 en ligne 10 de la feuille en cours et automatiquement déplacer les lignes correspondantes par exemple les lignes 5 et 6 en ligne 11 de la feuille 2[...]
    Je n'ai pas compris ce que tu voulais réaliser, et je n'aime pas trop les "par exemple les lignes 5 et 6" parce que "par exemple" ne correspond pas à l'expression d'une règle que l'on peut traduire en algorithme...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 274
    Par défaut
    Je vais essayer d'être plus clair.

    j'ai 4 feuilles, elles contiennent par ligne un certain nombre de cellules à remplir. Dans chaque ligne une cellule ("B") est saisi un identifiant. D'autres cellules contiennent des formules de calcul

    Les identifiants dans les feuilles 2 à 4 sont automatiquement préremplis par équivalence, l'utilisateur complète ensuite les informations dont il a besoin dans ces feuilles

    S'il saisit des infos dans la feuille 1 en ligne 4 et en ligne 5, il retrouvera les identifiants dans les lignes des autres feuilles, il n'aura qu'à compléter

    Le problème est qu'il doit pouvoir insérer une ligne entre la 4 et la 5 et retrouver également une ligne libre correspondante dans les autres feuilles sans perdre les identifiants

    C'est pour cela que je cherche dans ce cas à lui proposer un bouton qui déplace la ligne 5 en ligne 6, puis effacer la ligne 5 et idem automatiquement dans les autres feuilles

    L'utilisateur n'étant pas autorisé à faire insertion d'une ligne car le nombre de lignes est fixe


    Merci pour ton post #4, je m'en suis sorti :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If TypeName(Selection) = "Range" Then
        nb = Selection.Rows.Count   ' nb ligne à déplacer
        orig = Selection.Row        ' première ligne à déplacer
        For i = 1 To Selection.Rows.Count
        lastO = Selection(i, 1).Row ' dernière ligne à déplacer
        Next
    End If

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Te rends-tu compte de la fragilité d'un classeur dans lequel les lignes d'une feuille dépendent des lignes insérées dans une autre?

    Tant mieux si tu trouves ton bonheur dans mes réponses, mais perso, une construction comme celle-là me fait peur...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 274
    Par défaut
    Bonjour Pierre

    sur une ligne de la 1ere feuille l'utilisateur indique des renseignements généraux pour un identifiant, sur la seconde il retrouve l'identifiant et il complète avec des prix, sur la 3eme pour le même identifiant il complète avec des renseignements particuliers

    Les lignes contenant les identifiants doivent être dans l'ordre décidé par l'utilisateur (pas de critère permettant de faire un tri) et il ne peut y avoir qu'un nombre maximum fixe de lignes. D'où mon idée de déplacer les lignes dans tous les écrans pour insérer une ligne si l'utilisateur en a besoin (avec tous les contrôles pour respecter le nombre maxi, les débordements, etc)
    Les lignes ont une correspondance exacte dans chaque feuille.

    J'ai choisi cette solution car sur un seul écran tout n'était pas visible, trop de colonnes.

    Peut-être aurais-je du utiliser un "Userform" (je n'ai jamais utilisé) mais les qq tests que j'ai fait ne m'ont pas convaincu ou une autre solution que je ne vois pas

    En tout cas merci pour tes réponses, elles me sont précieuses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2013] Sélection par souris en enregistrement de macro
    Par defluc dans le forum VBA Word
    Réponses: 4
    Dernier message: 08/09/2014, 14h05
  2. Récupération code Couleur par click Souris
    Par Cjvg2 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 28/08/2013, 10h51
  3. Renseigné un textbox par une sélection de la souris
    Par jijie dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/05/2011, 17h34
  4. Sélection par rectangle ajustable à la souris
    Par reram dans le forum MATLAB
    Réponses: 5
    Dernier message: 12/08/2008, 21h03
  5. Couleur de sélection par défaut
    Par sicard_51 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 20/04/2003, 23h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo