Macro pour Recoiper une cellule sélectionnée avec la souris
Bonsoir
Pas ne nouvelle cette semaine ?
La macro était presque terminée
Je pensais la mettre en place
Mais peut-être es tu occupé à d'autres tâches ?
J'espère bientôt pouvoir lire la fin de cette macro
A+
Bonjour Gusc
Oui désolé j'avais pas mal de boulot !
Je ne pensais pas ton sujet si ardu à résoudre (ou tout simplement je ne sais pas comment y arriver simplement).
En réalité, le problème que je rencontre vient de l'utilisation des inputbox.
Mais essaie ce code :
Sub copie()
Dim i As Byte
Dim rg As Range
For i = 1 To 4
Set rg = Nothing
On Error Resume Next
'on valide la sélection de la cellule. Si ce n'est pas la bonne, en sélectionner une autre
Set rg = Application.InputBox("Est-ce la bonne cellule à copier ?", , ActiveCell.Offset(-1).Address, Type:=8)
On Error GoTo 0
If rg Is Nothing Then 'si on a cliqué sur Annuler, on sort
MsgBox "Procédure interrompue"
Exit Sub
Else
'on corrige la valeur à recopier le cas échéant
ng = Application.InputBox("Veuillez corriger la valeur de la cellule si besoin :", , rg, Type:=2)
End If
If VarType(ng) = vbBoolean Then 'si on a cliqué sur Annuler, on sort
MsgBox "Procédure interrompue"
Exit Sub
Else
ActiveCell.Value = ng
rg.Copy
ActiveCell.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End If
ActiveCell.Offset(0, 1).Select
Next i
End Sub- Si on clique sur Annuler, on sort de la macro
- A priori, je ne rencontre pas le même problème que toi sur la modification de l'inputbox (pas besoin de cliquer dedans pour modifier la valeur)
Edit : Ajout d'un Set rg = Nothing en début de boucle
Bonjour vba-new
Bien comptant de te relire
Je ne pensais pas ton sujet si ardu à résoudre (ou tout simplement je ne sais pas comment y arriver simplement).
Oui, je veux bien te croire, pour moi toutes les macros le sont plus ou moins !
Mais effectivement, je me rends bien compte maintenant que ma demande était ardue !
Cette fois on est pratiquement au but
La recopie du format est Ok
On peut interrompre la macro après chaque mauvaise recopie
Reste plus que le problème de la modification dans l'inputbox
Car avec ta macro, on a un gros avantage en gain de manipulation
Puisque l'on peut tout faire au clavier
Sauf cette correction dans l'inputbox
En réalité, le problème que je rencontre vient de l'utilisation des inputbox.
Et si on utilisait un UserForm plutôt que un Inputbox ??
Leur gestion est beaucoup plus importante
A+
Re,
Je ne visualise pas. Peux-tu m'indiquer exactement ce qui ne va pas ?Gusc a écrit :Sauf cette correction dans l'inputbox
C'est pour ça que j'ai dit que je ne sais pas comment trouver une solution simple.Gusc a écrit :Et si on utilisait un UserForm plutôt que un Inputbox ??
Leur gestion est beaucoup plus importante
Effectivement, l'userform est bien plus flexible mais la mise en place nécessite plus de temps.
Pour ne rien te cacher, par manque de temps, j'essaie de résoudre seulement des sujets du forum que je pense rapidement résoluble (au premier abord)...
Te concernant, je m'aperçois que ce n'était pas aussi simple.
Re,
Pour ne rien te cacher, par manque de temps, j'essaie de résoudre seulement des sujets du forum que je pense rapidement résoluble (au premier abord)...
Te concernant, je m'aperçois que ce n'était pas aussi simple.
Alors je remercie beaucoup, car visiblement ce n'était visiblement pas simple
Je ne visualise pas. Peux-tu m'indiquer exactement ce qui ne va pas ?
Une copie d'écran sera peut-être plus explicite
Si tu ne comprends pas, dis le moi, j'essayerais de m'expliquer différemment
A+
Je vois que tu es sur Windows XP. Apparemment le comportement n'est pas le même que sur Windows 7.
Voici ce que j'ai sur mon PC. La sélection est automatique :
Et avec ce code ?
Sub copie()
Dim i As Byte
Dim rg As Range
For i = 1 To 4
Set rg = Nothing
On Error Resume Next
'on valide la sélection de la cellule. Si ce n'est pas la bonne, en sélectionner une autre
Set rg = Application.InputBox("Est-ce la bonne cellule à copier ?", , ActiveCell.Offset(-1).Address, Type:=8)
On Error GoTo 0
If rg Is Nothing Then 'si on a cliqué sur Annuler, on sort
MsgBox "Procédure interrompue"
Exit Sub
Else
'on corrige la valeur à recopier le cas échéant
ng = InputBox("Veuillez corriger la valeur de la cellule si besoin :", , rg)
'ng = Application.InputBox("Veuillez corriger la valeur de la cellule si besoin :", , rg, Type:=2)
End If
If VarType(ng) = vbBoolean Then 'si on a cliqué sur Annuler, on sort
MsgBox "Procédure interrompue"
Exit Sub
Else
ActiveCell.Value = ng
rg.Copy
ActiveCell.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End If
ActiveCell.Offset(0, 1).Select
Next i
End SubRe,
Avec ce code, c'est Ok, j'accède à l'inputbox directement
Par contre j'ai perdu, la faculté de pouvoir interrompe la macro
Si je clique sur annuler dans ce 2ème inputbox (dans le 1er c'est Ok)
La copie est annulée, mais la macro se poursuit à la colonne suivante !
Dur dur !!
A+
Ah excuse pour le coup c'est ma faute ! C'est parce que j'ai utilisé la fonction inputbox plutôt que la méthode...
La gestion du bouton Annuler est différente.
Dans ce cas, le clic sur Annuler équivaut à une chaîne vide dans la boite de dialogue.
Donc, si tu entres une chaîne vide ou clique sur Annuler le comportement est le même.
Voici le code adapté :
Sub copie()
Dim i As Byte
Dim rg As Range
For i = 1 To 4
Set rg = Nothing
On Error Resume Next
'on valide la sélection de la cellule. Si ce n'est pas la bonne, en sélectionner une autre
Set rg = Application.InputBox("Est-ce la bonne cellule à copier ?", , ActiveCell.Offset(-1).Address, Type:=8)
On Error GoTo 0
If rg Is Nothing Then 'si on a cliqué sur Annuler, on sort
MsgBox "Procédure interrompue"
Exit Sub
Else
'on corrige la valeur à recopier le cas échéant
ng = InputBox("Veuillez corriger la valeur de la cellule si besoin :", , rg)
'ng = Application.InputBox("Veuillez corriger la valeur de la cellule si besoin :", , rg, Type:=2)
End If
If ng = "" Then 'si on a cliqué sur Annuler, on sort
MsgBox "Procédure interrompue"
Exit Sub
Else
ActiveCell.Value = ng
rg.Copy
ActiveCell.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End If
ActiveCell.Offset(0, 1).Select
Next i
End SubRe,
C'est parce que j'ai utilisé la fonction inputbox plutôt que la méthode...
La gestion du bouton Annuler est différente.
Dans ce cas, le clic sur Annuler équivaut à une chaîne vide dans la boite de dialogue.
Donc, si tu entres une chaîne vide ou clique sur Annuler le comportement est le même.
J'ai pas bien compris tes explications ?
Je me suis donc borné à refaire des tests
Oui c'est bien corrigé
A présent je peux donc sortir de la macro, a n'importe quel moment
Mais cette fois, j'ai perdu l'usage des flèches, je ne peux plus sélectionner l'une des cellules au-dessus ou au-dessous sans la souri
Vraiment désolé
A+
Tu ne peux pas avec cette méthode... Seul du texte peut être saisi !Gusc a écrit :Mais cette fois, j'ai perdu l'usage des flèches, je ne peux plus sélectionner l'une des cellules au-dessus ou au-dessous sans la souri
Re,
Je vois que tu m'a pas compris.
Je ne parle pas de saisir du texte ou autre chose
Je veux dire que si je suis en A5, et que je veux recopier A4, je ne peux pas le faire en pointant A4 avec la flèche du clavier.
A+
J'ai bien compris...
Dans le code, on a 2 utilisations différentes de InputBox :
1- La méthode InputBox avec la syntaxe TaVariable = Application.InputBox(..........)
Ici, la sélection d'une cellule avec les flèches du clavier est possible.
2- La fonction InputBox avec la syntaxe TaVariable = InputBox(..........)
Dans ce cas, la sélection d'une cellule est tout bonnement impossible (clavier ou souris) !