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 :

Probleme Automation - Utilisation de plusieurs Workbook


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 26
    Par défaut Probleme Automation - Utilisation de plusieurs Workbook
    Bonjour

    Je souhaite à partir d'un fichier de travail ( celui de base) prendre des données dans un fichier B, pour les coller dans un fichier C.
    Mais j'ai un problème d'automation, je pense que j'utilise trop de ActiveWorkbook, mais je ne trouve pas de solution ... Pouvez-vous m'aider?
    Voici mon code:

    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
    47
    48
    49
    50
    51
    52
     
    Sub Copie_données(classeurDonnées As Workbook, classeurConso As Workbook, nom_fichier_bu As String)
     
     
    Dim nbligne As Integer
    Dim classeurActif As Workbook ' fichier Données
    Dim classeurActif2 As Workbook 'fichier CONSO
     
    Set classeurActif = classeurDonnées
    Set classeurActif2 = classeurConso
    '
    '1ER traitement
    'Je recupere mes données du Workbook Classuer Données
    Workbooks(nom_fichier_Source).Activate
    nbligne = classeurActif.Worksheets("Données").Range("B65536").End(xlUp).Row 'LE PB d'AUTOMATION EST ICI
     
    Sheets("Données").Select
    Range("A4:CI" & nbligne).Select
    Selection.Copy
     
    'Je les colle dans le workbook classeurConso
    Workbooks("Conso_Mois.xlsm").Activate
    Sheets("Données").Select
    Range("A4").Select
    Selection.Insert Shift:=xlDown
     
     
    '2EME traitement
    'Je recupere mes données du Workbook Classuer Données
    Workbooks(nom_fichier_Source).Activate
    nbligne = classeurActif.Worksheets("Emploi Ressources").Range("B65536").End(xlUp).Row
    If nbligne > 4 Then
     
    Sheets("Emploi Ressources").Select
    If classeurActif.Worksheets("Emploi Ressources").Range("A4").Value = "Ne pas modifier cette ligne" Then
        Range("A5:CI" & nbligne).Select
        Selection.Copy
    Else
        Range("A4:CI" & nbligne).Select
        Selection.Copy
    End If
     
     
    'Je les colle dans le workbook classeurConso
    Workbooks("Conso_Mois.xlsm").Activate
    Sheets("Emploi Ressources").Select
    Range("A5").Select
    Selection.Insert Shift:=xlDown
     
     
     
    End If
    Les deux traitements sont presque identiques.

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut encore un select de trop
    Les deux traitements sont presque identiques.
    s'il y as 2 traitements il faut créer 2 fonctions ... si de plus ils sont quasi identique tu peu peu-être utiliser la même fonction pour les 2 traitements.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Copie_données(classeurDonnées As Workbook, classeurConso As Workbook, nom_fichier_bu As String)
     
     
    Dim nbligne As Integer
    Dim classeurActif As Workbook ' fichier Données
    Dim classeurActif2 As Workbook 'fichier CONSO
     
    Set classeurActif = classeurDonnées
    Set classeurActif2 = classeurConso
    Pourquoi passer par des variables intermédiaires (classeurActif , classeurActif2) tu peu directement utilisé les paramètres de ta fonction ...(classeurDonnées et ClasseurConso ..)

    Dans la plus part des cas activer un classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(nom_fichier_Source).Activate
    ne sert à rien ..' de plus c'est quoi ce "nom_fichier_source" ? le classeur à copier ne fait-il pas partie des 2 classeurs passés en paramètre de ta fonction ?

    il faut éviter les Select et Selection et penser à préciser le classeur concerné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("Données").Select
    Range("A4:CI" & nbligne).Select
    Selection.Copy
    peu (doit) s'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    classeurDonnées.Sheets("Données").Range("A4:CI" & nbligne).Copy


    encore un activate et un "nouveau" classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Conso_Mois.xlsm").Activate



    encore trop de select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sheets("Emploi Ressources").Select
    If classeurActif.Worksheets("Emploi Ressources").Range("A4").Value = "Ne pas modifier cette ligne" Then
        Range("A5:CI" & nbligne).Select
        Selection.Copy
    Else
        Range("A4:CI" & nbligne).Select
        Selection.Copy
    End If
    peu s'écrire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With classeurActif.Sheets("Emploi Ressources") 'Le with permet d'éviter la répétition du classeur et de la feuille
    If .Range("A4").Value = "Ne pas modifier cette ligne" Then
         .Range("A5:CI" & nbligne).Copy
    Else
        .Range("A4:CI" & nbligne).Copy
    End If

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 26
    Par défaut
    MErci pour ton aide, je me suis un peu perdu dans les select....
    MErci encore

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/05/2007, 20h37
  2. [STRUTS] utilisation de plusieurs tags <html:subm
    Par Super Castor dans le forum Struts 1
    Réponses: 6
    Dernier message: 23/06/2004, 11h42
  3. Probleme d'utilisation de directX 9 avec visual studio.net
    Par cranedoeuf dans le forum DirectX
    Réponses: 1
    Dernier message: 24/05/2004, 04h33
  4. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21
  5. [struts] utilisation de plusieurs fichiers de config
    Par Boosters dans le forum Struts 1
    Réponses: 4
    Dernier message: 25/03/2004, 10h04

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