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 entre 2 classeurs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    AMOE
    Inscrit en
    Juin 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : AMOE

    Informations forums :
    Inscription : Juin 2008
    Messages : 62
    Par défaut Copie entre 2 classeurs
    Bonjour à tous,

    voici mon problème : un classeur ouvre un fichier .lst, copie le contenu et le colle dans une de ses feuilles. Cette macro fonctionne sous XP (SP3) mais elle a un comportement aléatoire depuis que les postes sont en Office 2010. Sur certains poste la méthode activate plante : le fichier contenant la macro ne (re)devient pas actif de procéder à l'écriture des données.

    Un extrait du code de la macro incriminée
    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
    (...)
    CeClasseur = ActiveWorkbook.Name
    
        Workbooks.OpenText Filename:="c:\extrac.lst", _
            Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
            xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
            Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
            Array(2, 4), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
            Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1))
        
        Derniere_Ligne = Range("B1").End(xlDown).Row
    
        Range("A1:L" & CStr(Derniere_Ligne)).Select
    
        Selection.Copy
        Windows(CeClasseur).Activate
        Sheets("Resultat").Activate
        Range("A1").Select
        ActiveSheet.Paste
    (...)
    En gras la ligne qui pose problème.

    Si quelqu'un a une idée, n'hésitez pas . Merci.

    Cdlt

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Bonjour,

    la propriété ThisWorkbook référence déjà le classeur contenant le code !
    Et un bon code n'utilise pas de Select ni d'Activate ! Exemple rien qu'en lisant l'aide de Copy

    __________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


    __________________________________________________________________________________________________
    Tous unis, tous Charlie

  3. #3
    Membre confirmé
    Homme Profil pro
    AMOE
    Inscrit en
    Juin 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : AMOE

    Informations forums :
    Inscription : Juin 2008
    Messages : 62
    Par défaut
    Merci Marc-L pour ce retour,

    je veux bien admettre que le code est très largement perfectible mais en fait je ne peux pas le modifier (écrit par une tiers personne). Je cherche à comprendre cette différence comportement sur 2 PC.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Le code étant initialement mal écrit, il n'y a pourtant pas d'autre choix : faudra bien le corriger ‼
    Tout est pourtant dans l'aide de la méthode Range.Copy, suffit donc de la lire !

    Pour comprendre, rien de plus simple : exécuter le code en mode pas à pas via la touche F8
    pour suivre sa progression tout en vérifiant le contenu de la fenêtre Variables locales

    Sinon afin de conserver un code malpropre, utiliser en ligne n°16 Workbooks en place de Windows,
    question de logique avec la ligne n°2 ! Voir aussi cette discussion


    __________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  5. #5
    Membre confirmé
    Homme Profil pro
    AMOE
    Inscrit en
    Juin 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : AMOE

    Informations forums :
    Inscription : Juin 2008
    Messages : 62
    Par défaut
    Bonjour,

    suite à la modification de la ligne 16, comme proposé par Marc-L, je vous confirme que le problème est résolu. Merci à tous les intervenants et je prends note pour de futures développements en VBA des préconisations qui ont été faites sur ce poste. A+.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    J'ai modifié votre code d'origine (non testé), mais je ne sais pas si celà corrigera votre problème. Evitez de passer par les 'activate' et les 'select" (suggestion): ils consomment beaucoup de ressources

    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
    (...)
    Dim DestWbk As Workbook
     
    Set DestWbk = ThisWorkbook  'ActiveWorkbook....
     
     
        Workbooks.OpenText Filename:="c:\extrac.lst", _
            Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
            xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
            Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
            Array(2, 4), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
            Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1))
     
        Derniere_Ligne = Range("B1").End(xlDown).Row
     
        Range("A1:L" & CStr(Derniere_Ligne)).Select
     
        Selection.Copy
     
       DestWbk.Sheets("Resultat").Range("A1").Paste
     
    (...)
    ahh, j'ai mis du temps à envoyer ma réponse ..... cohérente avec celle de Marc

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour Vincent,

    en lisant l'aide de la méthode Range.Copy, une seule ligne peut donc remplacer tes lignes n°14 à 20 !
    Et à quoi bon créer une variable pointant sur ThisWorkbook ? Autant directement l'utiliser …

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

Discussions similaires

  1. copie entre deux classeurs différents
    Par titou31000 dans le forum VB.NET
    Réponses: 0
    Dernier message: 22/04/2010, 17h54
  2. [XL-2002] Copie de données avec liaison entre 2 classeurs
    Par cedana dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/03/2010, 17h44
  3. VB Excel copié/collé sous conditions entre 2 classeurs
    Par Popogrigri dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/01/2010, 10h27
  4. [VBA][EXCEL] Copie de graphes entre 2 classeurs
    Par billynirvana dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/03/2007, 16h03
  5. [VBA-E]copie entre classeurs (encore)
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/03/2006, 11h25

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