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
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 SubRe,
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+
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 SubOn 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 IfEssaie de le déplacer dans la macro... Et redis-moi.
Je ne comprends pas...Gusc a écrit :Est-il possible en cas d'erreur total dans la saisie
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 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 SubBonsoir
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+
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 SubComme 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 OKGusc a écrit :On ne peu toujours pas interrompre la macro
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+