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+

excel2

Re,

Gusc a écrit :

Sauf cette correction dans l'inputbox

Je ne visualise pas. Peux-tu m'indiquer exactement ce qui ne va pas ?
Gusc a écrit :

Et si on utilisait un UserForm plutôt que un Inputbox ??

Leur gestion est beaucoup plus importante

C'est pour ça que j'ai dit que je ne sais pas comment trouver une solution simple.

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+

excel excel2

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 :

capture

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 Sub

Re,

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 Sub

Re,

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+

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

Tu ne peux pas avec cette méthode... Seul du texte peut être saisi !

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) !

Rechercher des sujets similaires à "macro recoiper selectionnee souris"