Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/08/2011, 19h18   #1
Invité régulier
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 8
Points : 8
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 :
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.
Bluchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2011, 19h59   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Par défaut encore un select de trop

Citation:
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.


Citation:
Code :
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 :
Citation:
Code :
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é :
Citation:
Code :
1
2
3
Sheets("Données").Select
Range("A4:CI" & nbligne).Select
Selection.Copy
peu (doit) s'écrire :

Code :
classeurDonnées.Sheets("Données").Range("A4:CI" & nbligne).Copy


encore un activate et un "nouveau" classeur :
Citation:
Code :
Workbooks("Conso_Mois.xlsm").Activate



encore trop de select :
Citation:
Code :
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 :
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
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 17h16   #3
Invité régulier
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 8
Points : 8
MErci pour ton aide, je me suis un peu perdu dans les select....
MErci encore
Bluchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h49.


 
 
 
 
Partenaires

Hébergement Web