Bonjour,
voici ce que je voudrais faire:
sur plusieurs onglets d'un fichier, j'ai des données sous forme de listes
(bases de données avec entête de colonnes en première ligne)
les onglets ont tous le même nombre de colonnes, avec les mêmes entêtes
le nombre de lignes est différent d'un onglet à l'autre (chaque ligne est un
article différent)
je voudrais faire une macro qui rassemble toutes les données des onglets en
une seule liste, plus facile à traiter ensuite sous forme de TcD
comment m'y prendre ?
Bonjour. Tu dois le préciser lorsqu'un classeur est enregistré avec cette extension. Les fichiers non enregistrés s'appellent Classeur1 (sans extension) etc. Cordialement. Daniel "Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message de news: 433ff51d$0$18914$
çà y est, c'est bon ! j'avais déjà bien sûr identifié les objets selon mon application: j'avais remplacé Classeur2 par SOURCE et Classeur3 par CIBLE
ce qui bloquait, c'est qu'il fallait écrire SOURCE.xls et CIBLE.xls
pour ma gouverne, dans quel cas doit-on écrire le .xls ?
Merci beaucoup à Michdenis et aussi à Daniel pour leur patience (et leur science)
Marc D
"michdenis" a écrit dans le message de news:
Bonjour Marc,
Est-ce que ton classeur porte le nom de Classeur2 ? Tu dois pour le moins prendre le temps d'identifier les objets selon ton
application... Excel ne peut pas deviner !!! N'oublie pas d'y ajouter l'extension si ton classeur est déjà enregistrée
With Workbooks("NomDeTonClasseur.xls")
Applique la même chose pour le classeur de destination.
Concernant la variable A, comme j'ai défini le type de la variable A As integer, sa valeur est zéro en début de procédure. Rien à
modifier.
Salutations!
"Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message de news:
après la ligne With Workbooks("Classeur2") je reçois un message d'erreur Run-time error '9' Subscript out of range
une remarque sur l'instruction: If a = 0 Then le paramètre "a" ne doit-il pas être initialisé ? ou bien prend-il la valeur
0 par défaut ?
autre remarque: j'ai mis la macro dans la feuille thisWorkbook du fichier CIBLE, sans succès, puis n'étant pas sûr, j'ai créé un nouveau module dans ce même fichier: même résultat
merci
Marc D
"michdenis" a écrit dans le message de news:%23%
Bonjour Marc,
Cette procédure copie toutes les données de toutes les feuilles du classeur2 vers la feuille1 du classeur3
'--------------------------------- Sub Compilation() Dim a as Integer, Sh As Worksheet With Workbooks("Classeur2") For Each sh In .Worksheets derlig = sh.Range("A65536").End(xlUp).Row dercol = sh.Range("IV1").End(xlToLeft).Column
If a = 0 Then sh.Range("A1", sh.Cells(derlig, dercol)).Copy _ Workbooks("classeur3").Worksheets("Feuil1").Range("A1") a = 1 Else sh.Range("A2", sh.Cells(derlig, dercol)).Copy _
"Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message de news:
433fced7$0$16916$ C'est un mystère: çà ne vient pas de l'ouverture de SOURCE: ils sont actifs tous les 2 (SOURCE
et CIBLE) : c'est déjà ce que je faisais hier
voici ce qui se passe quand on déroule la macro pas à pas: à la deuxième instruction Workbooks("SOURCE.xls").Activate le fichier SOURCE est activé, il est ouvert sur l'onglet actif Feuil3 (il
comporte 3 onglets Feuil1, Feuil2, Feuil3 avec des majuscules)
à la 3ème ligne Sheets("Feuil1").Rows(1).Copy c'est tjrs l'onglet Feuil3 qui reste actif, et on reçoit le message d'erreur: Run-time error '9' Subscript out of range
je ne comprends pas bien...
cordialement, Marc D
"Daniel" a écrit dans le message de news:
J'aurai dû préciser que le classeur "SOURCE.xls" doit être ouvert. Si ce
n'est pas le cas, ouvre-le avant d'exécuter la macro ou ajoute : Workbooks.Open "C:tempSOURCE.xls" (change le répertoire en conséquence)
D'autre part vérifie que le nom de la feuille est bien "Feuil1". Daniel "Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message de
news: 433ef9ca$0$26565$
Bon, merci d'avoir pris le temps de me répondre, mais je n'ai pas réussi
à
le faire marcher... J'ai bien créé deux fichiers SOURCE ET CIBLE, et j'ai mis la macro dans
CIBLE.
Mais à l'exécution, j'ai un message d'erreur : Run-time error '9' Subscript out of range
en exécutant pas-à-pas, je constate que çà bloque à la 3ème ligne Sheets("Feuil1").Rows(1).Copy
En relisant la macro, je ne vois pas ce qui cloche... Une idée ?? Marc D
"Daniel" a écrit dans le message de news:%
Je crois que tu aurais dû initialiser un nouveau fil avec un nouveau
titre.
En fouillant dans mes archives, j'ai retrouvé la macro suivante avec
un
fichier source en lecture et un fichier "cible" de regroupement. Je ne me rapelle plus si je l'avais publié. Je le remets à tout hasard
:
Sub test() Dim Ctr As Long, i As Integer Workbooks("SOURCE.xls").Activate Sheets("Feuil1").Rows(1).Copy Workbooks("CIBLE.xls").Activate Sheets("Global").Paste Ctr = 2 Workbooks("SOURCE.xls").Activate For i = 1 To Sheets.Count Workbooks("SOURCE.xls").Activate Sheets(i).Activate Range("A2").Resize(Range("A65536").End(xlUp).Row - 1, _ Range("IV1").End(xlToLeft).Column).Copy Workbooks("CIBLE.xls").Activate Sheets("Global").Select Cells(Ctr, 1).Select Sheets("Global").Paste Ctr = Range("A65536").End(xlUp).Row + 1 Next i End Sub
Un peu bousculé en ce moment avec la rentrée scolaire et le déménagement
de
mes gamins, mais ça commence à se calmer. Cordialement. Daniel "Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message
de
news: 433ea381$0$25975$
Bonjour, voici ce que je voudrais faire: sur plusieurs onglets d'un fichier, j'ai des données sous forme de
listes
(bases de données avec entête de colonnes en première ligne) les onglets ont tous le même nombre de colonnes, avec les mêmes entêtes
le nombre de lignes est différent d'un onglet à l'autre (chaque ligne
est
un article différent)
je voudrais faire une macro qui rassemble toutes les données des onglets en une seule liste, plus facile à traiter ensuite sous forme de TcD
Information complémentaire: le fichier ci-dessus est un fichier A de saisie de données : il est
déposé
sur un répertoire d'un réseau, et plusieurs participants peuvent y
accéder
simultanément (fichier partagé) je souhaite que la macro soit dans un autre fichier B, où serait créée
la
compil: cette compil servira de table de données pour un TcD c'est à cause de ce TcD que je pense préférable de séparer en 2 fichiers (un de saisie, et un de traitement)
La macro proposée par Daniel dans les messages précédents marche bien,
mais elle crée la compil sous forme d'un onglet Global dans le fichier initial
Merci de votre aide Marc D
"Daniel" a écrit dans le message de news:%
Bonjour. Désolé, je ne me rappelle plus exactement de la question, sinon de
la
majuscule de "Global". Le mieux serait de reposter l'ensemble de ton problème sans me l'adresser
en
particulier, afin que de plus savants que moi puissent aussi y réfléchir.
Cordialement. Daniel "Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message
de news: 433e926e$1$25983$
J'espère que Daniel verra mon message: nous avons échangé plusieurs
fois,
mais je ne crois pas qu'il ait vu mon dernier message... Je lance une nouvelle bouteille à la mer
cordialement, Marc D
Bonjour.
Tu dois le préciser lorsqu'un classeur est enregistré avec cette extension.
Les fichiers non enregistrés s'appellent Classeur1 (sans extension) etc.
Cordialement.
Daniel
"Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message de
news: 433ff51d$0$18914$79c14f64@nan-newsreader-06.noos.net...
çà y est, c'est bon !
j'avais déjà bien sûr identifié les objets selon mon application: j'avais
remplacé Classeur2 par SOURCE et Classeur3 par CIBLE
ce qui bloquait, c'est qu'il fallait écrire SOURCE.xls et CIBLE.xls
pour ma gouverne, dans quel cas doit-on écrire le .xls ?
Merci beaucoup à Michdenis et aussi à Daniel pour leur patience (et leur
science)
Marc D
"michdenis" <michdenis@hotmail.com> a écrit dans le message de
news:elGsw91xFHA.1412@TK2MSFTNGP09.phx.gbl...
Bonjour Marc,
Est-ce que ton classeur porte le nom de Classeur2 ? Tu dois pour le moins
prendre le temps d'identifier les objets selon ton
application... Excel ne peut pas deviner !!! N'oublie pas d'y ajouter
l'extension si ton classeur est déjà enregistrée
With Workbooks("NomDeTonClasseur.xls")
Applique la même chose pour le classeur de destination.
Concernant la variable A, comme j'ai défini le type de la variable A As
integer, sa valeur est zéro en début de procédure. Rien à
modifier.
Salutations!
"Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message de
news:
après la ligne
With Workbooks("Classeur2")
je reçois un message d'erreur
Run-time error '9'
Subscript out of range
une remarque sur l'instruction:
If a = 0 Then
le paramètre "a" ne doit-il pas être initialisé ? ou bien prend-il la
valeur
0 par défaut ?
autre remarque: j'ai mis la macro dans la feuille thisWorkbook du fichier
CIBLE, sans succès, puis n'étant pas sûr, j'ai créé un nouveau module
dans
ce même fichier: même résultat
merci
Marc D
"michdenis" <michdenis@hotmail.com> a écrit dans le message de
news:%23%23nbyU1xFHA.900@TK2MSFTNGP11.phx.gbl...
Bonjour Marc,
Cette procédure copie toutes les données de toutes les feuilles du
classeur2 vers la feuille1 du classeur3
'---------------------------------
Sub Compilation()
Dim a as Integer, Sh As Worksheet
With Workbooks("Classeur2")
For Each sh In .Worksheets
derlig = sh.Range("A65536").End(xlUp).Row
dercol = sh.Range("IV1").End(xlToLeft).Column
If a = 0 Then
sh.Range("A1", sh.Cells(derlig, dercol)).Copy _
Workbooks("classeur3").Worksheets("Feuil1").Range("A1")
a = 1
Else
sh.Range("A2", sh.Cells(derlig, dercol)).Copy _
"Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message de
news:
433fced7$0$16916$79c14f64@nan-newsreader-07.noos.net...
C'est un mystère:
çà ne vient pas de l'ouverture de SOURCE: ils sont actifs tous les 2
(SOURCE
et CIBLE) : c'est déjà ce que je faisais hier
voici ce qui se passe quand on déroule la macro pas à pas:
à la deuxième instruction
Workbooks("SOURCE.xls").Activate
le fichier SOURCE est activé, il est ouvert sur l'onglet actif Feuil3
(il
comporte 3 onglets Feuil1, Feuil2, Feuil3 avec des majuscules)
à la 3ème ligne
Sheets("Feuil1").Rows(1).Copy
c'est tjrs l'onglet Feuil3 qui reste actif,
et on reçoit le message d'erreur:
Run-time error '9'
Subscript out of range
je ne comprends pas bien...
cordialement,
Marc D
"Daniel" <dZZZcolardelle@free.fr> a écrit dans le message de
news:OEX35FtxFHA.1284@tk2msftngp13.phx.gbl...
J'aurai dû préciser que le classeur "SOURCE.xls" doit être ouvert. Si
ce
n'est pas le cas, ouvre-le avant d'exécuter la macro ou ajoute :
Workbooks.Open "C:tempSOURCE.xls" (change le répertoire en
conséquence)
D'autre part vérifie que le nom de la feuille est bien "Feuil1".
Daniel
"Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message
de
Bon, merci d'avoir pris le temps de me répondre, mais je n'ai pas
réussi
à
le faire marcher...
J'ai bien créé deux fichiers SOURCE ET CIBLE, et j'ai mis la macro
dans
CIBLE.
Mais à l'exécution, j'ai un message d'erreur :
Run-time error '9'
Subscript out of range
en exécutant pas-à-pas, je constate que çà bloque à la 3ème ligne
Sheets("Feuil1").Rows(1).Copy
En relisant la macro, je ne vois pas ce qui cloche...
Une idée ??
Marc D
"Daniel" <dZZZcolardelle@free.fr> a écrit dans le message de
news:%23U1HYJqxFHA.2212@TK2MSFTNGP15.phx.gbl...
Je crois que tu aurais dû initialiser un nouveau fil avec un
nouveau
titre.
En fouillant dans mes archives, j'ai retrouvé la macro suivante
avec
un
fichier source en lecture et un fichier "cible" de regroupement.
Je ne me rapelle plus si je l'avais publié. Je le remets à tout
hasard
:
Sub test()
Dim Ctr As Long, i As Integer
Workbooks("SOURCE.xls").Activate
Sheets("Feuil1").Rows(1).Copy
Workbooks("CIBLE.xls").Activate
Sheets("Global").Paste
Ctr = 2
Workbooks("SOURCE.xls").Activate
For i = 1 To Sheets.Count
Workbooks("SOURCE.xls").Activate
Sheets(i).Activate
Range("A2").Resize(Range("A65536").End(xlUp).Row - 1, _
Range("IV1").End(xlToLeft).Column).Copy
Workbooks("CIBLE.xls").Activate
Sheets("Global").Select
Cells(Ctr, 1).Select
Sheets("Global").Paste
Ctr = Range("A65536").End(xlUp).Row + 1
Next i
End Sub
Un peu bousculé en ce moment avec la rentrée scolaire et le
déménagement
de
mes gamins, mais ça commence à se calmer.
Cordialement.
Daniel
"Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le
message
Bonjour,
voici ce que je voudrais faire:
sur plusieurs onglets d'un fichier, j'ai des données sous forme
de
listes
(bases de données avec entête de colonnes en première ligne)
les onglets ont tous le même nombre de colonnes, avec les mêmes
entêtes
le nombre de lignes est différent d'un onglet à l'autre (chaque
ligne
est
un
article différent)
je voudrais faire une macro qui rassemble toutes les données des
onglets
en
une seule liste, plus facile à traiter ensuite sous forme de TcD
Information complémentaire:
le fichier ci-dessus est un fichier A de saisie de données : il
est
déposé
sur un répertoire d'un réseau, et plusieurs participants peuvent
y
accéder
simultanément (fichier partagé)
je souhaite que la macro soit dans un autre fichier B, où serait
créée
la
compil: cette compil servira de table de données pour un TcD
c'est à cause de ce TcD que je pense préférable de séparer en 2
fichiers
(un
de saisie, et un de traitement)
La macro proposée par Daniel dans les messages précédents marche
bien,
mais
elle crée la compil sous forme d'un onglet Global dans le
fichier
initial
Merci de votre aide
Marc D
"Daniel" <dZZZcolardelle@free.fr> a écrit dans le message de
news:%23lC1BVpxFHA.736@tk2msftngp13.phx.gbl...
Bonjour.
Désolé, je ne me rappelle plus exactement de la question, sinon
de
la
majuscule de "Global".
Le mieux serait de reposter l'ensemble de ton problème sans me
l'adresser
en
particulier, afin que de plus savants que moi puissent aussi y
réfléchir.
Cordialement.
Daniel
"Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le
message
de
news: 433e926e$1$25983$79c14f64@nan-newsreader-05.noos.net...
J'espère que Daniel verra mon message: nous avons échangé
plusieurs
fois,
mais je ne crois pas qu'il ait vu mon dernier message...
Je lance une nouvelle bouteille à la mer
Bonjour. Tu dois le préciser lorsqu'un classeur est enregistré avec cette extension. Les fichiers non enregistrés s'appellent Classeur1 (sans extension) etc. Cordialement. Daniel "Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message de news: 433ff51d$0$18914$
çà y est, c'est bon ! j'avais déjà bien sûr identifié les objets selon mon application: j'avais remplacé Classeur2 par SOURCE et Classeur3 par CIBLE
ce qui bloquait, c'est qu'il fallait écrire SOURCE.xls et CIBLE.xls
pour ma gouverne, dans quel cas doit-on écrire le .xls ?
Merci beaucoup à Michdenis et aussi à Daniel pour leur patience (et leur science)
Marc D
"michdenis" a écrit dans le message de news:
Bonjour Marc,
Est-ce que ton classeur porte le nom de Classeur2 ? Tu dois pour le moins prendre le temps d'identifier les objets selon ton
application... Excel ne peut pas deviner !!! N'oublie pas d'y ajouter l'extension si ton classeur est déjà enregistrée
With Workbooks("NomDeTonClasseur.xls")
Applique la même chose pour le classeur de destination.
Concernant la variable A, comme j'ai défini le type de la variable A As integer, sa valeur est zéro en début de procédure. Rien à
modifier.
Salutations!
"Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message de news:
après la ligne With Workbooks("Classeur2") je reçois un message d'erreur Run-time error '9' Subscript out of range
une remarque sur l'instruction: If a = 0 Then le paramètre "a" ne doit-il pas être initialisé ? ou bien prend-il la valeur
0 par défaut ?
autre remarque: j'ai mis la macro dans la feuille thisWorkbook du fichier CIBLE, sans succès, puis n'étant pas sûr, j'ai créé un nouveau module dans ce même fichier: même résultat
merci
Marc D
"michdenis" a écrit dans le message de news:%23%
Bonjour Marc,
Cette procédure copie toutes les données de toutes les feuilles du classeur2 vers la feuille1 du classeur3
'--------------------------------- Sub Compilation() Dim a as Integer, Sh As Worksheet With Workbooks("Classeur2") For Each sh In .Worksheets derlig = sh.Range("A65536").End(xlUp).Row dercol = sh.Range("IV1").End(xlToLeft).Column
If a = 0 Then sh.Range("A1", sh.Cells(derlig, dercol)).Copy _ Workbooks("classeur3").Worksheets("Feuil1").Range("A1") a = 1 Else sh.Range("A2", sh.Cells(derlig, dercol)).Copy _
"Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message de news:
433fced7$0$16916$ C'est un mystère: çà ne vient pas de l'ouverture de SOURCE: ils sont actifs tous les 2 (SOURCE
et CIBLE) : c'est déjà ce que je faisais hier
voici ce qui se passe quand on déroule la macro pas à pas: à la deuxième instruction Workbooks("SOURCE.xls").Activate le fichier SOURCE est activé, il est ouvert sur l'onglet actif Feuil3 (il
comporte 3 onglets Feuil1, Feuil2, Feuil3 avec des majuscules)
à la 3ème ligne Sheets("Feuil1").Rows(1).Copy c'est tjrs l'onglet Feuil3 qui reste actif, et on reçoit le message d'erreur: Run-time error '9' Subscript out of range
je ne comprends pas bien...
cordialement, Marc D
"Daniel" a écrit dans le message de news:
J'aurai dû préciser que le classeur "SOURCE.xls" doit être ouvert. Si ce
n'est pas le cas, ouvre-le avant d'exécuter la macro ou ajoute : Workbooks.Open "C:tempSOURCE.xls" (change le répertoire en conséquence)
D'autre part vérifie que le nom de la feuille est bien "Feuil1". Daniel "Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message de
news: 433ef9ca$0$26565$
Bon, merci d'avoir pris le temps de me répondre, mais je n'ai pas réussi
à
le faire marcher... J'ai bien créé deux fichiers SOURCE ET CIBLE, et j'ai mis la macro dans
CIBLE.
Mais à l'exécution, j'ai un message d'erreur : Run-time error '9' Subscript out of range
en exécutant pas-à-pas, je constate que çà bloque à la 3ème ligne Sheets("Feuil1").Rows(1).Copy
En relisant la macro, je ne vois pas ce qui cloche... Une idée ?? Marc D
"Daniel" a écrit dans le message de news:%
Je crois que tu aurais dû initialiser un nouveau fil avec un nouveau
titre.
En fouillant dans mes archives, j'ai retrouvé la macro suivante avec
un
fichier source en lecture et un fichier "cible" de regroupement. Je ne me rapelle plus si je l'avais publié. Je le remets à tout hasard
:
Sub test() Dim Ctr As Long, i As Integer Workbooks("SOURCE.xls").Activate Sheets("Feuil1").Rows(1).Copy Workbooks("CIBLE.xls").Activate Sheets("Global").Paste Ctr = 2 Workbooks("SOURCE.xls").Activate For i = 1 To Sheets.Count Workbooks("SOURCE.xls").Activate Sheets(i).Activate Range("A2").Resize(Range("A65536").End(xlUp).Row - 1, _ Range("IV1").End(xlToLeft).Column).Copy Workbooks("CIBLE.xls").Activate Sheets("Global").Select Cells(Ctr, 1).Select Sheets("Global").Paste Ctr = Range("A65536").End(xlUp).Row + 1 Next i End Sub
Un peu bousculé en ce moment avec la rentrée scolaire et le déménagement
de
mes gamins, mais ça commence à se calmer. Cordialement. Daniel "Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message
de
news: 433ea381$0$25975$
Bonjour, voici ce que je voudrais faire: sur plusieurs onglets d'un fichier, j'ai des données sous forme de
listes
(bases de données avec entête de colonnes en première ligne) les onglets ont tous le même nombre de colonnes, avec les mêmes entêtes
le nombre de lignes est différent d'un onglet à l'autre (chaque ligne
est
un article différent)
je voudrais faire une macro qui rassemble toutes les données des onglets en une seule liste, plus facile à traiter ensuite sous forme de TcD
Information complémentaire: le fichier ci-dessus est un fichier A de saisie de données : il est
déposé
sur un répertoire d'un réseau, et plusieurs participants peuvent y
accéder
simultanément (fichier partagé) je souhaite que la macro soit dans un autre fichier B, où serait créée
la
compil: cette compil servira de table de données pour un TcD c'est à cause de ce TcD que je pense préférable de séparer en 2 fichiers (un de saisie, et un de traitement)
La macro proposée par Daniel dans les messages précédents marche bien,
mais elle crée la compil sous forme d'un onglet Global dans le fichier initial
Merci de votre aide Marc D
"Daniel" a écrit dans le message de news:%
Bonjour. Désolé, je ne me rappelle plus exactement de la question, sinon de
la
majuscule de "Global". Le mieux serait de reposter l'ensemble de ton problème sans me l'adresser
en
particulier, afin que de plus savants que moi puissent aussi y réfléchir.
Cordialement. Daniel "Marc D" <http://cerbermail.com/?GYTiuFqCBb> a écrit dans le message
de news: 433e926e$1$25983$
J'espère que Daniel verra mon message: nous avons échangé plusieurs
fois,
mais je ne crois pas qu'il ait vu mon dernier message... Je lance une nouvelle bouteille à la mer