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 :

Aide pour copier / coller une sélection de plusieurs cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 281
    Par défaut Aide pour copier / coller une sélection de plusieurs cellules
    Bonjour à toutes et tous,

    J'ai un fichier source et un fichier destination dans lequel je colle dans la feuille "Param" la valeur copiée dans mon fichier source feuille "Tableau des cotisations".
    Pour ce faire, j'utilise le code suivant et cela marche très bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Workbooks.Open (Adresse_Fichier_Export)
    Windows(Nom_Fichier_Export).Activate
     
    ActiveWindow.DisplayWorkbookTabs = True
     
    Worksheets("Param").Range("C16").Value = Workbooks(Nom_Fichier_Source).Worksheets("Tableau des cotisations").Range("C2").Value
    En revanche, je cherche à copier depuis mon fichier source feuille "Tableau des cotisations" une plage de cellules "B12:E41" pour la coller dans mon fichier destination feuille "Tableau des cotisations" cellule B12.

    Pour ce faire, j'ai essayé le code suivant et cela ne marche pas, rien ne se passe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Tableau des cotisations").Range("B12").Value = Workbooks(Nom_Fichier_Source).Worksheets("Tableau des cotisations").Range("B12:E41").Select
    J'ai essayé : Worksheets("Tableau des cotisations").Range("B12:E41").Value => cela ne marche pas
    J'ai essayé : Workbooks(Nom_Fichier_Source).Worksheets("Tableau des cotisations").Range("B12:E41").Value => cela ne marche pas
    Je bidouille et n'y arrive pas.

    L'assistant macro depuis mon fichier source me donne le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sheets("Tableau des cotisations").Select
        Range("B12:E41").Select
        Selection.Copy
        Windows(Ici le nom de mon fichier de destination entre "").Activate
        Sheets("Tableau des cotisations").Select
        Range("B12").Select
        ActiveSheet.Paste
    J'ai essayé de l'adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Windows("Nom_Fichier_Source").Worksheets("Tableau des cotisations").Select
        Range("B12:E41").Select
        Selection.Copy
        Windows("Nom_Fichier_Export").Worksheets("Tableau des cotisations").Select
        Range("B12").Select
        ActiveSheet.Paste
    Je suis entrain de devenir galérien !

    Merci pour votre aide.
    Philippe

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En revanche, je cherche à copier depuis mon fichier source feuille "Tableau des cotisations" une plage de cellules "B12:E41" pour la coller dans mon fichier destination feuille "Tableau des cotisations" cellule B12
    Si vous cherchez à copier la plage B12:E41 de la feuille nommée "MaSource" et la coller à partir de la cellule B12 de la feuille nommée maCible du classeur actif, la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ActiveWorkbook
    .Worksheets("maSource").Range("B12:E41").Copy Destination:=.Worksheets("maCible").Range("B12")
    End With
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 281
    Par défaut
    Bonjour Philippe, bonjour à toutes et tous

    Je reviens devant mon ordinateur après quelques jours d'absence.
    Merci pour votre code, mais celui-ci ne fait pas le boulot.
    Je me suis sans doute mal exprimé.

    Je lance la macro depuis mon fichier source nommé "Origine".
    1) elle ouvre le fichier de destination nommé "P6 à P8" et affiche les onglets ; => ça marche
    2) dans la feuille "Tableau des cotisations" elle colle en dur la date du jour ; => ça marche
    3a) elle doit retourner dans le fichier source dans la feuille "Tableau des cotisations" et copier la plage de cellules "B12:E41" ;
    3b) elle doit retourner dans le fichier de destination dans la feuille "Tableau des cotisations" et coller en cellule B12 la plage "B12:E41".
    C'est à cette étape 3 (lignes 21 à 24) que je n'y arrive pas.
    Voici le code complet de la macro.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Sub Export_Données_7()
     
    Application.ScreenUpdating = False
     
    Dim Valeur As Single
     
        On Error GoTo A_la_fin ' Pour fichier introuvable
     
        Nom_Fichier_Source = Worksheets("Param").Range("B27").Value
        Nom_Fichier_Export = ThisWorkbook.Worksheets("Param").Range("B45").Value
        Adresse_Fichier_Export = ThisWorkbook.Worksheets("Param").Range("B46").Value
     
        Workbooks.Open (Adresse_Fichier_Export)
        Windows(Nom_Fichier_Export).Activate
     
        ActiveWindow.DisplayWorkbookTabs = True
     
        Worksheets("Tableau des cotisations").Range("A2").FormulaR1C1 = "=TODAY()"
        Worksheets("Tableau des cotisations").Range("A2").Value = Worksheets("Tableau des cotisations").Range("A2").Value
     
        Windows(Nom_Fichier_Source).Activate
        With ActiveWorkbook
        .Worksheets("Tableau des cotisations").Range("B12:E41").Copy Destination:=.Worksheets("Tableau des cotisations").Range("B12")
        End With
     
        Windows(Nom_Fichier_Export).Activate
        Worksheets("Accueil").Activate
        ActiveWindow.DisplayWorkbookTabs = False
     
        Workbooks(Nom_Fichier_Export).Close SaveChanges:=True
     
        MsgBox ("     Exportation terminée" & Chr(13) & Chr(13) & "         Bonne journée"), vbInformation, "YEAHHHHHHHHH"
     
        Windows(Nom_Fichier_Source).Activate
     
        Worksheets("Cours & Applications").Range("G11").FormulaR1C1 = "=TODAY()"
        Worksheets("Cours & Applications").Range("G11").Value = Range("G11").Value
     
    GoTo fin ' Pour sauter A_la_fin
     
    A_la_fin: MsgBox ("                       ! BIEN TENTE !" & Chr(13) & Chr(13) & "Exportation impossible, fichier non trouvé." & Chr(13) & Chr(13) & "La procédure est abandonnée."), vbInformation, "                    OUPS !!!!"
     
    fin:
     
    Application.ScreenUpdating = True
    End Sub
    Merci pour une assistance.
    Philippe

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Les instructions Windows("Name").Activate sont inutiles dans 99% des cas. Comme d'ailleurs toutes lés méthodes Activate, Select, etc.
    Votre problème se situe dans l'argument spécifié dans Destination et peut-être la source qui est ActiveWorkbook
    Il y a lieu de préciser dans les deux cas le classeur source et le classeur cible par l'objet Workbooks("NomSource") et Workbooks("Destination") ou si la source ou la destination est le classeur où se trouve le code VBA on choisira ThsWorkbook
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 281
    Par défaut EUREKA
    Bonsoir Philippe,
    Merci pour votre réponse qui m'a bien aidée.

    J'ai supprimé tous les "Windows(Nom_Fichier_Export).Activate"

    Mes lignes 21 à 24 sont devenues :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook
        .Worksheets("Tableau des cotisations").Range("B12:E41").Copy Destination:=Workbooks(Nom_Fichier_Export).Worksheets("Tableau des cotisations").Range("B12")
        End With
    Et cela marche mais après avoir sorti le point dans l'expression "Destination:=."

    Merci beaucoup
    Philippe

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour Philippe,
    Et cela marche mais après avoir sorti le point dans l'expression "Destination:=."
    Oui, c'est normal. le point qui se trouvait dans l'argument Destination de mon code soit .Worksheets("maCible").Range("B12") était relié à l'objet définit après l'instruction With qui est ActiveWorkbook de même d'ailleurs que la feuille source.

    L'un des avantages du bloc With...End With est de clarifier le code lorsque l'on utilise le même objet sur plusieurs lignes

    Au lieu d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Worksheets("maSource").Range("B12:E41").Copy Destination:=ActiveWorkbook.Worksheets("maCible").Range("B12")
    on écrira
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ActiveWorkbook
    .Worksheets("maSource").Range("B12:E41").Copy Destination:=.Worksheets("maCible").Range("B12")
    End With
    Donc dans votre cas il n'y a pas vraiment de raison d'utiliser ce bloc puisque le classeur source et la cible sont différents
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Tableau des cotisations").Range("B12:E41").Copy Destination:=Workbooks(Nom_Fichier_Export).Worksheets("Tableau des cotisations").Range("B12")
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. [AC-2016] Aide pour copier coller lors de création de dossier
    Par Filipozzi dans le forum VBA Access
    Réponses: 7
    Dernier message: 29/03/2017, 11h44
  2. [XL-2007] macro pour copier /coller une zone de cellules
    Par bitissa1991 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/07/2016, 09h50
  3. [XL-2010] Pb pour copier coller une plage de cellule variable
    Par eglantine217 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/05/2012, 12h10
  4. Menu pour copier/coller une courbe sous Word
    Par Le_ramo dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 18/01/2011, 19h50
  5. aide pour copier/coller et pour trier
    Par chamoxx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/07/2008, 21h27

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