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 23/11/2011, 09h47   #1
Futur Membre du Club
 
Inscription : février 2011
Messages : 64
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 64
Points : 16
Points : 16
Par défaut copier coller plusieurs fichiers dans un seul fichier

Bonjour,
je veux copier les données de plusieurs fichiers les unes après les autres dans un fichier.
J'ai écrit une macro pour cela, malheureusement, il y a un bug que je n'arrive pas à débugger. Quelqu'un pourra t il s'il vous plaît corriger l'erreur?
Le bug se trouve sur la ligne 16

Merci par avance


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
Sub COPIEBASEVG(chemin, feuille)
Dim Wbk As Workbook
Dim Rep As String
Dim Plage As Range
Dim tbl() As Variant
Dim i As Integer, j As Integer
 
 
Set Wbk = Workbooks.Open(chemin)
Set Plage = ThisWorkbook.Worksheets("service").Range("A2:E" & Range("D65536").End(xlUp).Row)
tbl = Plage.Value
 
    For i = 1 To UBound(tbl, 1)
        For j = 1 To UBound(tbl, 2)
            If tbl(i, j) = "" Then
                ThisWorkbook.Worksheets("service").Range("i,j").Value = Wbk.Worksheets(feuille).Range("A2:D7").Value
            End If
        Next j
    Next i
 
'ThisWorkbook.Worksheets("service").Range("C9:F14").Value = Wbk.Worksheets(feuille).Range("A2:D7").Value
 
Wbk.Close False
'Wbks.Close True
Set Wbk = Nothing
End Sub
hobine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h08   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 861
Points : 1 861
A la place de
Code :
ThisWorkbook.Worksheets("service").Range("i,j").Value
Essaie
Code :
ThisWorkbook.Worksheets("service").Cells(i,j).Value
ZebreLoup est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h11   #3
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 861
Points : 1 861
Et sans regarder plus en détail, tu essaies de copier une plage dans une cellule. Ca ne plantera pas forcément, mais c'est bizarre. Au mieux tu auras à chaque fois la première cellule de la plage.
ZebreLoup est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h25   #4
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Tu fais une erreur ici :

Code :
Set Plage = ThisWorkbook.Worksheets("service").Range("A2:E" & Range("D65536").End(xlUp).Row)
"Range("D65536").End(xlUp).Row" se réfère au classeur actif, c'est à dire celui que tu viens d'ouvrir. Tu devrais plutôt écrire :

Code :
1
2
3
With ThisWorkbook.Worksheets("service")
    Set Plage = .Range("A2:E" & .Range("D65536").End(xlUp).Row)
End With
Pour compléter ce que dit Zebreloup, écris plutôt :

Code :
1
2
                ThisWorkbook.Worksheets("service").Range("i,j").Resize(6, 4).Value = _
                Wbk.Worksheets(feuille).Range("A2:D7").Value
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h37   #5
Futur Membre du Club
 
Inscription : février 2011
Messages : 64
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 64
Points : 16
Points : 16
tout d'abord merci pour la peine que tu te donnes pour mon sort,
j'avais déjà essayé mais elle bug toujours

Bonjour Daniel,
qu'on se retrouve, j'ai fallu dire les grands esprits se rencontrent, malheureusement j'en suis pas un en vba.
pour revenir à mon probleme , j'ai remplacé comme indiqué mais le probleme persiste sur la même ligne, j'en vois un bout de mon code.
ligne 10 , il y a le bug

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Set Wbk = Workbooks.Open(chemin)
With ThisWorkbook.Worksheets("service")
 Set Plage = .Range("A2:E" & Range("A65536").End(xlUp).Row)
End With
tbl = Plage.Value
 
    For i = 1 To UBound(tbl, 1)
        For j = 1 To UBound(tbl, 2)
            If tbl(i, j) = "" Then
                ThisWorkbook.Worksheets("service").Range("i,j").Resize(6, 4).Value = Wbk.Worksheets(feuille).Range("A2:D7").Value
            End If
        Next j
    Next i
hobine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h44   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 861
Points : 1 861
C'est toujours ton Range("i,j") ! Fais Cells(i,j) comme on te l'a dit.
ZebreLoup est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h49   #7
Futur Membre du Club
 
Inscription : février 2011
Messages : 64
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 64
Points : 16
Points : 16
ZabreLoup,
je viens de remplacer range par Cells mais le problème persiste à la même ligne
hobine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h50   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 861
Points : 1 861
Tu as bien enlevé les guillemets ?
Que dit le message d'erreur ?
ZebreLoup est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 10h58   #9
Futur Membre du Club
 
Inscription : février 2011
Messages : 64
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 64
Points : 16
Points : 16
ZebreLoup,
tu avais raison au niveau guillemet,
je vous remercie Daniel et toi pour le coup de pousse
hobine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 11h40   #10
Futur Membre du Club
 
Inscription : février 2011
Messages : 64
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 64
Points : 16
Points : 16
dsl de revenir auprès de vous, car Ca ne fait pas le job puisque cela ne copie pas les fichiers à la suite les uns des autres.
Je vous remets ma macro et deux exemples de fichiers excel (ce n'est pas le fichier original) en PJ


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
Sub COPIEBASEVG(chemin, feuille)
Dim Wbk As Workbook
Dim Rep As String
Dim Plage As Range
Dim tbl() As Variant
Dim i As Integer, j As Integer
 
 
Set Wbk = Workbooks.Open(chemin)
With ThisWorkbook.Worksheets("service")
    Set Plage = .Range("A2:E" & .Range("A65536").End(xlUp).Row)
End With
tbl = Plage.Value
 
    For i = 2 To UBound(tbl, 1)
        For j = 1 To UBound(tbl, 2)
            If tbl(i, j) = "" Then
                                ThisWorkbook.Worksheets("service").Cells(i, j).Resize(6, 4).Value = _
                Wbk.Worksheets(feuille).Range("A2:D7").Value
            End If
        Next j
    Next i
 
 
 
Wbk.Close False
'Wbks.Close True
Set Wbk = Nothing
End Sub
Fichiers attachés
Type de fichier : xls Service1.xls (77,5 Ko, 6 affichages)
Type de fichier : xls UET1.xls (128,0 Ko, 3 affichages)
hobine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 12h15   #11
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Normal, tu ne passes qu'une fois sur :

Code :
Sub CommandButton1_Click()
Là où tu choisis LE fichier à ouvrir.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C 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 14h31.


 
 
 
 
Partenaires

Hébergement Web