OVH Cloud OVH Cloud

grouper des listes de longueur différentes

21 réponses
Avatar
Marc D
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 ?

Merci de votre aide
Marc D

1 réponse

1 2 3
Avatar
Daniel
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:

433fea8e$0$30255$
Bonjour Michdenis, merci d'intervenir

je butte encore sur la même erreur:

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 _

Workbooks("classeur3").Worksheets("Feuil1").Range("A65536").End(xlUp)(2)

End If
Next
End With

End Sub
'---------------------------------


Salutations!



"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





























1 2 3