Macro pour Recoiper une cellule sélectionnée avec la souris

Bonjour

Je souhaiterais réaliser une macro qui me permettrait de recopier une cellule que je sélectionnerais avec la souris et qui se copierait dans le cellule active.

Je prends un exemple pour être plus explicite.

1) Je me mets en A6

2) J'active la macro

3) Je clique sur la cellule A2

4) A2 vient se copier dans A6

Étant attendu que A2 est bien un exemple, il faut que une fois le macro lancée, je puisse sélectionner n’importe quelle cellule que je souhaite recopier.

Merci pour votre aide

Bonjour Gusc,

Je comprends ce que tu veux faire.

Mais peux-tu expliquer pourquoi un simple copier-coller ne te suffit pas ? Ta demande nécessitant l'exécution supplémentaire d'une macro...

Bonjour

Je veux faire cela pour plusieurs cellules les unes après les autres sur une même ligne

et pour qu'une personne ne connaissant pas spécialement Excel puisse simplement remplir ce tableau.

Un fois que j'aurais compris le principe, je pense logiquement pour je pourrais reproduire cette action plusieurs fois à la suite

et peut-être pouvoir délimiter éventuellement la zone de recopie (Délimiter par exemple une recopie à partir d'une cellule qui est dans la même colonne).

A+

Re,

Une solution basique, si j'ai bien compris, dans le fichier joint.

Donc, comme tu as dit :

1- Sélectionne une cellule

2- Clique sur le bouton "Copier"

3- Sélectionne la cellule à copier

4- Clique sur OK

5- La cellule sélectionnée en 3 a été copiée dans celle sélectionnée en 1

La macro :

Sub copie()
    Dim rg As Range

    On Error Resume Next    'au cas où on clique sur Annuler
    Set rg = Application.InputBox("Sélectionner la cellule à copier", Type:=8)
    On Error GoTo 0
    If Not rg Is Nothing Then rg.Copy ActiveCell
End Sub
203copie-test.xlsm (14.15 Ko)

Merci

C'est bien ce que je voulais

Merci pour ton aide

Je m'attendais à quelques chose de plus compliqué

Est-ce que je peux affecter une colonne à "rg"

Comme je le disais dans ma précédente réponse

Faire en sorte que la recopie ne se fasse que sur la même colonne que la cellule active

En quelque sorte pour le cas présent, que la cellule à recopier soit obligatoirement dans la colonne A

et si possible, le pointeur se positionne d’emblée sur la cellule juste au-dessus de la cellule active

puisque-ce que c'est majoritairement celle-ci qui sera recopiée ?

Je me positionne sur A10

J'active la macro

Le pointeur se positionne sur A9

Je valide ou je déplace le pointeur sur autre cellule de la colonne A avant de valider

A+

A+

Essaie avec ce code :

Sub copie()
    Dim rg As Range

    On Error Resume Next    'au cas où on clique sur Annuler
    Do
        Set rg = Nothing    'vide la variable
        Set rg = Application.InputBox("Sélectionner la cellule à copier (doit être dans la colonne A)", , ActiveCell.Offset(-1).Address, Type:=8)
    Loop Until Left(rg.Address, 3) = "$A$" Or rg Is Nothing
    On Error GoTo 0
    If Not rg Is Nothing Then rg.Copy ActiveCell
End Sub

Re,

C'est parfait, merci pour cette nouvelle macro.

J'ai poursuivi la macro pour les cellules voisines sur la même ligne

Mais il y a encore une chose que je n'arrive pas à faire

Bien qu'elle doit surement être très facile à faire !

C'est de passer en mode édition

Vois l'exemple ci-joint

Dans la cellule B4, j'ai donc recopié la cellule B3

Si je souhaite modifier cette cellule ainsi recopiée avant de continuer la macro dans les cellules voisines

Pour par exemple mettre "Ceci est un essai" au lieu de "Ceci est exemple"

Ou tout simplement remplir cette cellule directement au clavier

sans pour autant arrêter la macro

Il faudrait juste après la recopie que je passe en mode édition

Pour je puisse donc modifier éventuellement le texte puis valider pour poursuive la macro

A+

59copie-test2.xlsm (14.75 Ko)

Ce n'est pas si facile

Une solution avec le code suivant :

Sub copie()
    Dim rg As Range

    For i = 1 To 4
        On Error Resume Next    'au cas où on clique sur Annuler
        Do

            choix = MsgBox("Voulez-vous modifier la cellule à recopier ?" & vbCrLf & _
                           "Vous avez 5 secondes", vbYesNo)
            If choix = vbYes Then
                'on laisse la main à l'utilisateur pendant 5 secondes
                duree = Now + TimeValue("0:00:05")
                Do
                    DoEvents
                Loop Until Now > duree
            End If

            Set rg = Nothing    'vide la variable
            Set rg = Application.InputBox("Sélectionner la cellule à copier (doit être dans la colonne A)", , ActiveCell.Offset(-1).Address, Type:=8)
        Loop Until Range(rg.Address).Column = i Or rg Is Nothing
        On Error GoTo 0
        If Not rg Is Nothing Then rg.Copy ActiveCell
        ActiveCell.Offset(0, 1).Range("A1").Select

    Next i

End Sub

On demande à l'utilisateur s'il veut prendre la main 5 secondes, le temps de faire la modification...

Re,

Je pense que cela doit être cela, mais il y a un petit bogue

Ou c'est plutôt moi qui me suis mal exprimé

La macro me demande si je veux modifier la cellule avant la recopie

c'est le contraire que je veux, pouvoir modifier la cellule qui à été recopiée

Bravo pour la simplification de la macro !

Est-il possible en cas d'erreur total dans la saisie de stopper la macro plutôt que de devoir aller jusqu'au bout pour pour rien ?

A+

J'ai un peu de mal à visualiser

Etant donné que c'est ce code qui te laisse la main :

            choix = MsgBox("Voulez-vous modifier la cellule à recopier ?" & vbCrLf & _
                           "Vous avez 5 secondes", vbYesNo)
            If choix = vbYes Then
                'on laisse la main à l'utilisateur pendant 5 secondes
               duree = Now + TimeValue("0:00:05")
                Do
                    DoEvents
                Loop Until Now > duree
            End If

Essaie de le déplacer dans la macro... Et redis-moi.

Gusc a écrit :

Est-il possible en cas d'erreur total dans la saisie

Je ne comprends pas... A quel moment exactement arrêter la macro ? Il faut que tu me donnes des exemples concrets (avec des faire cela en A5, ceci en A12...)

Re,

Essaie de le déplacer dans la macro... Et redis-moi.

Je viens d'essayer une multitude d'endroits

Pour l'instant, je ne trouve pas la solution

Ou le choix s'opère trop tôt ou il s'opère trop tard

Je vais essayer de me réexpliquer pour être plus compréhensif

1) Je me place en A5, la macro recopie la cellule A4 soit "5099"

Elle me propose de modifier ce nombre (ou éventuellement le texte, si c'est du texte)

  • C'était bien ce que je voulais, je clique donc sur Non, et la cellule A5 reste à 5099
  • Ce n'était pas ce que je voulais; je clique donc sur "Oui"
et je corrige par exemple 5099 pour mettre 5070 et la cellule A5 est maintenant donc à 5070

Et la macro passe à la cellule suivante à droite

Je ne comprends pas... A quel moment exactement arrêter la macro ? Il faut que tu me donnes des exemples concret

Je reprends un exemple

Je me place en A5, la macro recopie la cellule A4, c'est Ok, je valide Non et la macro continue pour la cellule B5

Là elle copie B3, je clique Ok, mais en fait je me rends compte que je me suis trompé

Donc plutôt que de continuer ainsi jusqu'à G5 ou plus

Autant arrêter tout de suite la macro et recommencer tout depuis A5

Il faudrait donc l'InputBox qu'il y ait une 3ème case "Esc" qui permettrait d’arrêter la procédure

Si c'est possible bien sûr ?

A+

Je t'avoue que j'ai un peu de mal à trouver une solution.

Essaie ce code :

Sub copie()
    Dim rg As Range
    Dim i As Byte, choix As Byte, sortir As Byte

    For i = 1 To 4
        On Error Resume Next    'au cas où on clique sur Annuler
        Do

            Set rg = Nothing    'vide la variable
            Set rg = Application.InputBox("Sélectionner la cellule à copier", , ActiveCell.Offset(-1).Address, Type:=8)

            choix = MsgBox("Voulez-vous modifier la cellule à recopier ?" & vbCrLf & _
                           "Vous avez 5 secondes", vbYesNo)
            If choix = vbYes Then
                'on laisse la main à l'utilisateur pendant 5 secondes
                duree = Now + TimeValue("0:00:05")
                Do
                    DoEvents
                Loop Until Now > duree
            End If

        Loop Until Range(rg.Address).Column = i Or rg Is Nothing
        On Error GoTo 0
        If rg Is Nothing Then
            sortir = MsgBox("Voulez-vous quitter la macro ?", vbYesNo)
            If sortir = vbYes Then Exit Sub
        End If
        If Not rg Is Nothing Then rg.Copy ActiveCell
        ActiveCell.Offset(0, 1).Range("A1").Select

    Next i

End Sub

Bonsoir

Non, cela ne va pas malheureusement

Si je tape "Non"

La copie ne se fait pas

Je peux écrire le texte dans la cellule pendant ces 5 secondes

Mais je ne peux pas le modifier, puisqu'il n'y a rien de copier

La copie n'est effective que à partir du moment que l'on tape "Oui"

J'ai chercher par moi même

Mais je vois que la commande "Edition" n'existe pas en fait en VBA ?

Je pensais à quelque chose qui pourrait peut être résoudre le problème

Bien que je ne sais pas le concevoir, et même si il est réalisable

Au lieu de copier directement la cellule A4 par exemple dans la cellule A5

Ce serait d'abord de copier le contenu dans un Inputbox

Ce qui permet normalement de modifier éventuellement le contenu

puis de valider ensuite la copie de l'Inputbox dans la cellule A5

Ce serait donc une copie dans un zone tampon, le temps de vérifier ou modifier le contenu

En résumé pour être plus clair

Je suis en A5

Je lance la macro

Le pointeur se place sur A4

Un Inputbox me demande si c'est bien la bonne cellule à recopier

Le contenu de la cellule est recopié dans un autre Inputbox

Je corrige le contenu dans cet Inputbox et/ou je le valide

Le contenu de l'Inputbox est alors recopié dans la cellule A5

et la macro se poursuit à l'identique en B5

En ce qui concerne la sortie éventuelle de la macro

Cela ne fonctionne pas non plus

La MsgBox ,n'apparait en fait que à la fin de la procédure

A+

Bonsoir

J'ai fais quelques recherches dans ce sens

je n'ai rien trouvé de vraiment correspondant

Pense tu que ce soit possible ?

A+

Bonjour Gusc,

Désolé, je n'ai pas eu le temps de m'y re-pencher encore (ton problème me sollicitant quelques neurones...). Je regarde ce soir et te redis.

Bonjour Gusc,

On va commencer à 0. Essaie ce code et dis-moi s'il correspond à ta demande :

Sub copie()
    Dim i As Byte

    For i = 1 To 4
        rg = Application.InputBox("Est-ce la bonne cellule à copier ?", , ActiveCell.Offset(-1).Address, Type:=2)
        If rg = "exit" Then Exit Sub
        'si on a cliqué sur Annuler
        If VarType(rg) = vbBoolean Then
            n = Application.InputBox("Veuillez sélectionner la cellule à recopier", , Type:=2)
            If n = "exit" Then Exit Sub
        Else
            If n = "exit" Then Exit Sub
            n = ActiveCell.Offset(-1).Value
        End If
        n = Application.InputBox("Veuillez corriger la valeur de la cellule si besoin :", , n, Type:=2)
        'si on a cliqué sur Annuler
        If VarType(n) = vbBoolean Then
            'code à définir
        Else
            If n = "exit" Then Exit Sub
            ActiveCell.Value = n
        End If

        ActiveCell.Offset(0, 1).Select

    Next i

End Sub

Ça fait un peu bricolage, mais j'ai mis une fonction de sortie de procédure de mon cru !

Si tu tapes exit dans les différentes boîtes de dialogue, on sort de la procédure !

Fais des tests et dis-moi.

Encore quelques tentatives et j'abandonne...

Bonjour vba-new

C'est super

Il y a des choses qui ne vont pas, mais je pense que ce n'est sans doute que de petites erreurs ?

Je renvoie le fichier avec un exemple et ta macro

Lorsque que l'on recopie, je suis en A5, si je pointe par exemple A2, c'est A4 que je recopie

En fait quoi que l'on sélectionne, c'est toujours la cellule juste au-dessus que l'on recopie

En revanche, on peut bien modifier le contenu dans l'inputbox

On ne peu toujours pas interrompre la macro

Si on a fait une erreur, on est obligé de continuer jusqu'au bout

Mais çà, tu n'as peut être eu le temps de t'y pencher

A+

21copie-test4.xlsm (15.15 Ko)

Essaie avec ce code (on y est presque...) :

Sub copie()
    Dim i As Byte

    For i = 1 To 4
        rg = Application.InputBox("Est-ce la bonne cellule à copier ?", , ActiveCell.Offset(-1).Address, Type:=2)
        If VarType(rg) = vbBoolean Then
            n = Application.InputBox("Veuillez sélectionner la cellule à recopier", , Type:=2)
            If n = "exit" Then Exit Sub
        Else
            If rg = "exit" Then Exit Sub
            n = rg    'Range(rg).Value
        End If
        ng = Application.InputBox("Veuillez corriger la valeur de la cellule si besoin :", , n, Type:=2)
        'si on a cliqué sur Annuler
        If VarType(ng) = vbBoolean Then
            'code à définir
        Else
            If ng = "exit" Then Exit Sub
            ActiveCell.Value = ng
        End If

        ActiveCell.Offset(0, 1).Select

    Next i

End Sub
Gusc a écrit :

On ne peu toujours pas interrompre la macro

Comme je l'ai dit, la solution un peu barbare que j'ai trouvée est de saisir le mot exit dans n'importe quel inputbox et de cliquer sur OK

Re,

Oui on y presque

J'avais oublié de le dire tout à l'heure,

Lors de la recopie, on perd le format, je suppose que ce n'est pas grand chose

Maintenant on recopie bien la cellule que l'on veux !

Un chose embêtante, mais ça, je ne sais pas si c'est modifiable ??

Si lors de la recopie, on est d'accord avec le contenu copié, il suffit de toujours appuyer sur Entrée

Si on veut modifier le contenu, curieusement bien que le texte dans l'inputbox soit activé

On est obligé de se servir de la souris pour cliquer à la fin du texte pour pouvoir le modifier ??

A+

Bonjour

As tu pu modifier la copie avec son format d'origine ?

As tu compris ma remarque au sujet de l'inputbox ?

A+

Rechercher des sujets similaires à "macro recoiper selectionnee souris"