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 :

Copie de Range via une inputbo [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Par défaut Copie de Range via une inputbo
    Bonjour à tous,

    Tout d'abord je tiens à préciser que je suis débutant en Vba.

    J'ai une question concernant une macro que j'ai crée. Le but de celle-ci est d'inviter l'utilisateur à sélectionner une plage de cellules et de copier cette plage de cellules dans une nouvelle feuille de calcul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub SelectionCellules()
     
        'Sélection de la plage de cellules par l'utilisateur
        Dim maPlage As Range
        On Error Resume Next
        Set maPlage = Application.InputBox("Sélectionnez la plage de cellule à importer sous format doc ", Type:=8)
        On Error GoTo 0
        If maPlage Is Nothing Then MsgBox "Sélection annulée"
     
        ' On copie la sélection
        Range(maPlage.Address).Copy
     
        ' Création d'une feuille de calcul temporaire
        Dim NouvelleFeuille As Worksheet
        Set NouvelleFeuille = ThisWorkbook.Worksheets.Add(before:=ThisWorkbook.Worksheets(1))
        Worksheets(1).Name = "FeuilleTest"
     
        'On colle la sélection dans la feuille  de calcul temporaire
        Sheets("FeuilleTest").Activate
        Rows("1:1").Select
        Selection.PasteSpecial Paste:=xlPasteAll
     
        Application.CutCopyMode = xlCopy
     
    End Sub
    Après plusieurs essais, je me suis aperçu que cette routine fonctionne correctement, uniquement quand l'utilisateur, lance la macro depuis la feuille dans laquelle les cellules à copier sont situées.

    Je vous donne un exemple pour être sur d'être clair:

    Imaginons que je veuille, sélectionner les cellules A1:G26, dans la feuille "Feuil3".
    Si je lance la macro (Alt+F8) alors que je suis déjà dans la feuille "Feuil3", cela fonctionne.

    En revanche, si je lance la macro depuis la feuille "Feuil2", les cellules copiées seront les cellules A1:G26 de la feuille "Feuil2" même si lorsque l'inputbox est lancée, l'utilisateur a bien sélectionné les cellules A1:G26 de la "Feuil3".

    Comment dois-je m'y prendre pour que cette routine fonctionne quelque soit la feuille depuis laquelle elle est lancée.

    Merci d'avance pour le temps que vous voudrez bien prendre pour traiter ma demande.

    Cire190

  2. #2
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour Cire190 ,

    active la feuil3 avant l'inputbox,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Sheets("Feuil3").Activate
     Set maPlage = Application.InputBox("Sélectionnez la plage de cellule à importer sous format doc ", Type:=8)

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut cire190 et le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub SelectionCellules()
    Dim maPlage As Range
    Dim NouvelleFeuille As Worksheet
    On Error Resume Next
    Set maPlage = Application.InputBox("Sélectionnez la plage de cellule à importer sous format doc ", Type:=8)
    On Error GoTo 0
    If maPlage Is Nothing Then 
        MsgBox "Sélection annulée"
        Exit sub
    end If
    ' On copie la sélection
    maPlage.Copy
    ' Création d'une feuille de calcul temporaire
    Set NouvelleFeuille = ThisWorkbook.Worksheets.Add(before:=ThisWorkbook.Worksheets(1))
    Worksheets(1).Name = "FeuilleTest"
    'On colle la sélection dans la feuille  de calcul temporaire
    'Sheets("FeuilleTest").Activate
    Rows("1:1").PasteSpecial Paste:=xlPasteAll
     
    Application.CutCopyMode = False
    End Sub
    Macro complêtement changée, hein .

    Quelques remarques en passant :
    Il est préférable de regrouper toutes les déclarations en début de la macro : ça évite de rechercher dans le code où elles sont, ça ne change strictement rien à la macro, et le code en devient plus lisible. Regroupées, ça évite d'en oublier en cas de changements de type quand tu les modifies en cours de mise au point.

    Quand tu crées une feuille, elle devient automatiquement la feuille active. Pas besoin de la sélectionner/activer, puisqu'elle l'est déjà.

    "Application.CutCopyMode = False" ne sert qu'à supprimer les tirets clignotant qui indiquent que la sélection va servir dans une opération copier/couper.

    Si tu ne détermines pas de plage, tu préviens l'utilisateur : ça c'est bien. Mais si tu ne veux pas qu'Excel se fâche, avertis-le qu'il faut qu'il arrête la macro, sous peine d'un violent message d'erreur .

    Tu te garantis de pouvoir sélectionner une plage, dont tu n'utilises que l'adresse => ce ne sont pas les cellules déterminées qui sont copiées, mais celles ayant la même adresse, de la feuille active au moment du lancement de la macro qui sont copiées. Donc, utilise directement le range.

    Dans le même odre d'idée, Plage.Select puis Selection.Action n'est souvent que générateur de problèmes. Plage.Action est nettement mieux (pour la plupart des cas).

    Tu copies sur une ligne. Comme je ne connais pas les besoins, je ne peux proposer de solution, mais le xlPasteAll ne gène dans ce cas. Je mettrais plutot un xlValue.
    A+

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Par défaut
    Bonjour,

    Merci sabzzz et Gorfael pour vos réponses et vos conseils concernant ma routine.

    Tu te garantis de pouvoir sélectionner une plage, dont tu n'utilises que l'adresse => ce ne sont pas les cellules déterminées qui sont copiées, mais celles ayant la même adresse, de la feuille active au moment du lancement de la macro qui sont copiées. Donc, utilise directement le range.
    En effet, c'est bien ici que j'avais un problème, je ne copiais que les cellules de la feuille active et non pas les cellules sélectionnées par l'utilisateur. En passant par:

    Cela a résolu le problème.

    Concernant le collage: je souhaite conserver la mise en forme, c'est pour cela que j'ai mis XlPasteAll.

    Merci encore.

    A bientôt

    Cire190

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

Discussions similaires

  1. action play/pause pour une copie de fichiers via socket
    Par dumoulex dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 13/05/2011, 14h05
  2. masquer/afficher une range via bouton
    Par marcoole dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/01/2011, 21h22
  3. [AC-2003] Copie de sauvegarde d'une base Access via VBA
    Par CC25 dans le forum VBA Access
    Réponses: 4
    Dernier message: 22/04/2010, 20h06
  4. [XL-2007] Copie de "bouton de commande" via une Macro
    Par boulet67 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/05/2009, 17h34
  5. [XL-97] Copie capricieuse des valeurs d'un range vers une autre feuille
    Par Michel Delapouaitte dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 24/04/2009, 09h34

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