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_Programme de copie simple


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 15
    Par défaut Aide_Programme de copie simple
    Bonjour,

    Je suis novice en visual basic et je veux mettre au point une macro qui me permet de copier dans un classeur ouvert, une plage de donnée d'une feuille se trouvant dans un classeur fermer. Voilà le code que j'ai élaborer :

    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
    Option Explicit
    Sub Recuperer()
     
    'declaration des variables
     
        Dim feuille_copier As Worksheet ' declaration de la feuille depuis laquelle les données sont copiees
        Dim feuille_copie As Worksheet ' declaration de la feuille dans laquelle on va copier les données
        Dim Dir As String ' declaration de la variable qui contiendra le chemin d'accès au fichier
        Dim classeur_copier As String  ' declaration du classeur d'ou l'on va copier les données
        Dim classeur_copie As String    'declaration du classeur ou les données seront copier
        Dim plage_copier As String ' plage que l'on veut copier
     
    ' _________________ I Partie Modifiable__________________
     
     
        Dir = "C:\Documents and Settings\...\Parcelle.xlsx"   'On selectionne le chemin d'acces aux fichier
        classeur_copier = "Parcelle.xlsx" ' classeur depuis lequel on va copier les données
        classeur_copie = "Classeur1.xlsm"   ' classeur dans lequel on va copier les données
        plage_copier = "A1:O13" ' plage de la feuille que l'on veut copier
        ThisWorkbook.Activate 'permet de specifier que la feuille on l'on copie les données est dans le classeur contenant la macro
        Set feuille_copie = Worksheets("donnee_foret")    '  nom de la feuille dans laquelle on va copier les données
     
    '________________________________________________________
     
     
    'On ouvre le classeur contenant les informations sur les communes et on les recopie sur la feuille donnee_commun
        Application.CutCopyMode = False 'evite de garder une copie des données dans le presse papier
        Application.DisplayAlerts = False ' enleve les message du presse papier
        Workbooks.Open Dir ' ouverture du classeur a copier
     
     
    '______________ II Partie a modifier__________________
     
        Set feuille_copier = Worksheets("Parcelle_Requete") ' nom de la feuille depuis laquelle on va copier les données
     
    '____________________________________________________
     
        feuille_copier.Select ' selectionne la feuille desiree pour le classeur qui a été ouvert
        Range(plage_copier).Copy ' copie la plage selectionner
        Workbooks(classeur_copie).Activate 'Rend le classeur ou l'on va copier actif
        feuille_copie.Paste 'Copie dans la selectionner dans le classeur copier
        Workbooks(classeur_copier).Close 'Ferme le classeur d'ou on a copier les données
        Application.DisplayAlerts = True
        Application.CutCopyMode = True
     
    End Sub
    Je souhaiterais votre avis, c'est à dire si il est simplifiable et si vous voyez certaines erreurs. Le code semble s'exécuter comme il faut.
    Cordialement

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,

    le mieux est souvent l'ennemi du bien

    Ici, tu as un code qui fonctionne, que tu as mis en place. Globalement, il est bien conçu et ne nécessite pas d'optimisation importante. Il est ttoujours possible de diminuer les étapes ou le nombre de lignes de code, mais il est plus raisonnable de garder ce que tu as déjà, pour ne pas que par la suite tu aies des problèmes et ne sache les résoudre

    les seuls points qu'il prendre en considération
    - Dir est une fonction spécifique VBA, aussi il vaut mieux éviter de l'utiliser pour nommer une variable
    - tu travailles au niveau des worksheets en activant auparavant tes workbooks. Je pense qu'il est préférable de prévenir que guérir et de passer d'une syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set feuille_copier = Worksheets("Parcelle_Requete") ' nom de la feuille depuis laquelle on va copier les données
        feuille_copier.Select ' selectionne la feuille desiree pour le classeur qui a été ouvert
        Range(plage_copier).Copy
    à une syntaxe sans risque de pointage vers le mauvais classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Parcelle_Requete").Range(plage_copier).Copy
    tu indiques explicitement la plage de cellules qui t'intéresse et tu t'affranchis d'un potentiel problème de nom de feuille identique entre tes deux classeurs, où tu risques de ne pas être certain du classeur pris en charge par le code
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 15
    Par défaut
    Merci a toi jpcheck, j'effectue ces changement immédiatement. L’intérêt de ce post est en effet d'optimiser mon code afin de me faire prendre de bonnes habitudes

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 15
    Par défaut
    Le code au dessus marche parfaitement bien grâce à l'aide de jpchech.

    La feuille est importer dans le classeur, cependant j'essaye desormais de copier cette feuillle sur une autre feuille du classeur grâce au code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Application.CutCopyMode = False
        Application.DisplayAlerts = False
        Workbooks(classeur_copie).Activate
        feuille_synt.Select
        Cells(1, 1).Select
        feuille_copie.Copy
        feuille_synt.Paste
    Le fichier se colle dans ma feuille synthèse cependant la feuille est aussi copier dans un nouveau classeur qui se créer "classeur1", puis "classeur2", "classeur3" chaque fois que je relance la macro. Je pense que cela est du au presse papier, mais ce n'est que pure spéculation. Comment faire ?

    ps : la commande avec Thisworkbook (et ActiveWorkbook) ne marche pas

    Merci d'avance

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 21/07/2013, 14h46
  2. copie simple d'un objet?
    Par toutounesan dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/08/2011, 12h32
  3. Simple copie du texte d'une cellule excel dans le titre d'un graphique chart
    Par pinto_armindo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2007, 10h59
  4. macro simple de copie cellule
    Par icecream33 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/07/2006, 12h06
  5. [PhpMyAdmin] Simple copie d'un champ...
    Par Zenit dans le forum Requêtes
    Réponses: 8
    Dernier message: 31/12/2005, 01h03

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