Juxtaposition de plusieurs tableaux excel d un meme fichier, VBA [Résolu]

Ricoetienne - 14 nov. 2012 à 02:42 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention
- 21 nov. 2012 à 17:29
Bonjour a tous,

Je suis novice en VBA et novice en Forum...

J aurais souhaite grace a une macro, juxtaposer sur un onglet deux tableaux excel presents dans un meme fichier excel mais sur des onglets differents.

Ces tableaux ont les memes intitules en ligne, c est la raison pour lqauelle je veux ensuite les juxtaposer...

Pour exemple, un tableau de 7 colonnes en Sheet1 et un autre de 8 colonnes en Sheet2, a juxtaposer en sheet 3.

J'aimerais pouvoir selectionner pour chaque feuille presente, les colonnes a selectionner.

Merci d avance pour vos reponses


Ps: J espeere ne pas m etre trompe dans le theme... et je precise ne pas avoir trouve de messages sur ce topic. Uniquement des message pour combiner les lignes les unes apres les autres....
Afficher la suite 

35 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 nov. 2012 à 12:50
+3
Utile
Bon ...
Tu vas l'avoir, ton code ... ===>>> après ma sieste, hein ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 nov. 2012 à 06:05
0
Utile
Bonjour,
Il te suffit pour y parvenir d'utiliser la méthode copy (à lire dans ton aide VBA) avec son paramètre destination.
Ceci étant dit (et simple), cette partie n'est pas claire :
J'aimerais pouvoir selectionner pour chaque feuille presente, les colonnes a selectionner.

essaye d'être plus précis à ce sujet.
D'autant que l'on ne travaille pas à coups de sélections, mais directement avec les objets de Excel (et dans ce cas ! les feuilles et leurs plages).
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 nov. 2012 à 06:12
0
Utile
J'ai par ailleurs un doute en ce qui concerne ta "juxtaposition". Qu'entends-tu par là ? :
1) présenter deux feuilles côte à côte (deux fenêtres, donc) ?
ou
2) ne présenter qu'une feuille contenant les plages qui t"intéressent, en provenance de deux feuilles ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Ricoetienne - 14 nov. 2012 à 08:10
0
Utile
Bonjour Ucfoutu et merci de ta reponse,


1) Oui c est exactement ca, presenter une feuille contenant les plages de donnees qui m interessent en provenance de plusieurs feuilles...

2) Je vais repreciser ma demande, j ai 4 feuilles ou il y a quatre tableaux ayant une plage de donnees differentes (nombre de colonnes differentes).

Je veux faire une synthese de ces 4 tableaux dans une feu different qui se mettra a jour automatiquement....(Y compris si

l on ajoute une colonne au sein d un onglet)

Pour batir cette synthese je vais selectionner uniquement les plages de donnees pertinentes (les colonnes pertinnentes au sein de chacun de ces 4

feuilles..)


A noter que tous les feuilles ont le meme format au niveau des lignes (Projet 1, PRojet 2, Projet 3, ETC...)
Commenter la réponse de Ricoetienne
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 nov. 2012 à 08:21
0
Utile
Pour batir cette synthese je vais selectionner uniquement les plages de donnees pertinentes (les colonnes pertinnentes au sein de chacun de ces 4
feuilles..)

Toujours insuffisamment précis .
Tu vas les sélectionner comment ? Manuellement ? Par code (et si oui, en fonction de quels critères exacts pour les identifier ?)

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Ricoetienne - 14 nov. 2012 à 08:57
0
Utile
Je voudrais pouvoir les selectionner en fonction du titre de la colonne et de l element commun a toutes les feuilles (Numero de projet)
Commenter la réponse de Ricoetienne
Ricoetienne - 14 nov. 2012 à 08:58
0
Utile
Comment puis-je faire pour te faire passer le fichier ??
Commenter la réponse de Ricoetienne
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 nov. 2012 à 09:59
0
Utile
Inutile de me "passer" le fichier. Je n'ouvre d'ailleurs jamais un classeur que je n'ai pas moi-même créé (raisons de sécurité, entre autres) !
Tu dois savoir exposer aisément ce que tu conçois clairement !
Si tu as des difficultés à exposer, c'est que ta conception est confuse !
Lis dans mon profil ce que j'en pense (la dernière phrase, relative à l'exposé des tenants et aboutissants d'un problème !).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Ricoetienne - 14 nov. 2012 à 10:08
0
Utile
Tu as raison, dsl pr ça
Je vais rediger une description precise et reposte a la suite...
Commenter la réponse de Ricoetienne
Ricoetienne - 15 nov. 2012 à 03:01
0
Utile
Le fichier excel dont je parle me sert a suivre le deroulement des differentes etapes de la logistique d un projet.

Ayant de nombreuses informations a rentrer manuellement (Bcp de lignes et Bcp de colonnes), j ai prefere segmenter et organiser le travail, j ai donc reparti une etape par feuille excel. J ai 4 feuilles Excel.

Etant sur le meme projet, une element est commun a toutes ces feuilles : le numero de colis (repertories de 1 a 230, et precedes du nom du projet. Cela me donne un code du genre: “BABA-1 a BABA-230” classes dans le meme ordre croissant sur toutes les feuilles.
Ces feuilles correspondant a chaque etape sont susceptibles d evoluer (Ajout de colonnes)

Maintenant, ce que je souhaiterais faire, c est une synthese de ces 4 feuilles excel source dans une feuille differente et ne selectionner uniquement que les plages de donnees pertinentes au sein de ces dernieres.

Cad etre en mesure de selectionner grace a une macro les plages de donnees qui m interessent et que ces dernieres s adaptent aux changements operes sur les feuilles sources.

J ai pense a une solution avec la fonction IF(Index(Match)) se basant sur le nom de la colonne et le code du colis, mais cela ne marche pas en cas d ajout de colonne sur l une des feuille source(Modification plage de donnees).

C’est la raison pour laquelle je me retourne vers vous car je pense qu’une macro en VBA pourait fiabiliser, cad prendre en compte les changements au sein de la plage de donnees(Feuilles source)sans que personne n ait a intervenir dans les formules.

Est-ce plus clair?

Merci d’avance
Commenter la réponse de Ricoetienne
Ricoetienne - 15 nov. 2012 à 03:04
0
Utile
dsl pour les guillemets, je ne savais pas que cela ne passait pas....
Commenter la réponse de Ricoetienne
Ricoetienne - 15 nov. 2012 à 06:19
0
Utile
En fouinant j ai trouve une macro qui combinait les donnees les unes derrieres les autres...

Je l ai un peu modifie en y allant en tatonnant et maintenant elle compiles les colonnes des feuilles presentes dans mon fichier...

C est exactement la logique dont j ai besoin, il faut seulement que je puisse selectionner ma plage de donnees au sein de chaque feuille et ce

sera PARFAIT...

Sub MacroCombiner()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim Feuille As Worksheet
Dim l As Integer

ActiveSheet.Name = "final" 'cette feuille portera le nom final
k = 1 'initialisation de la variable k
l = 1 'initialisation de la variable l
For Each Feuille In ActiveWorkbook.Worksheets 'on repete l'action pour toutes les feuilles du fichier
If Feuille.Name <> "final" Then 'sauf sur la feuille finale

i = Feuille.UsedRange.Rows.Count 'nombre de lignes de la feuille actuelle
j = Feuille.UsedRange.Columns.Count 'nombre de colonnes de la feuille actuelle
Feuille.Select 'on selectionne la feuille

If l = 1 Then 'si première feuille on copie aussi les titres (première ligne)
Range(Cells(1, 1), Cells(i, j)).Select
Else
Range(Cells(1, 1), Cells(i, j)).Select 'sinon on copie qu'à partir de la ligne 2
End If

Selection.Copy

Sheets("final").Select
Cells(k, l).Select 'on sélectionne la première ligne vide

ActiveSheet.Paste 'on colle les données de la feuille actuelle
If l = 1 Then
l l 'k première ligne vide
Else
l = l
End If

l = l
End If

Next Feuille 'on passe à la feuille suivante



End Sub
Commenter la réponse de Ricoetienne
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 15 nov. 2012 à 07:11
0
Utile
Est-ce plus clair?

Non ! J'attendais du technique et non un exposé des raisons qui te conduisent à ta démarche !
et ne selectionner uniquement que les plages de donnees pertinentes au sein de ces dernieres.

la "pertinence" n'est toujours pas définie !
Alors : reprenons :
1) Tu as en colonne A de chacune des feuilles à traiter des valeurs, classées par ordre croissant, de la forme :
BABA-1
BABA-2
...
BABA_198
BIBI-1
BIBI-2
BIBI-3
...
BIBI-120
BOBO-1
BOBO-2
...
etc ...

Est(ce cela ? ===>> oui / non ?
2) tu dis que
ces feuilles correspondant a chaque etape sont susceptibles d evoluer (Ajout de colonnes)

Pas clair ! je comprends que les colonnes utilisées d'une feuilles peuvent être d'un nombre différent de celui d'une autre feuille, mais ignore TOTALEMENT si, sur une même feuille, le nombre de colonnes remplies est ou non le même pour chaque ligne !
3) y a-t-il , pour chaque donnée "pertinente" le même nombre de lignes sur chacune de tes feuilles ? ===>> oui / Non ?
4) ceci :
If l = 1 Then 'si première feuille on copie aussi les titres (première ligne)
  Range(Cells(1, 1), Cells(i, j)).Select
Else
  Range(Cells(1, 1), Cells(i, j)).Select 'sinon on copie qu'à partir de la ligne 2
End If 

n'a aucun sens pour deux raisons :
a) c'est 2 fois la même chose
b) cela contredit ce que tu as dit plus haut, puisque Nb de colonnes utilisées pouvant différer d'une feuille à l'autre . Et si la première a moins de colonnes que les suivantes, par exemple, seuls les titres de la première serait recopiés !
5) définis clairement (c'est la 3ème fois que je te le demande !) tes critère de "pertinence" ! Tu utilises à chaque fois ce mot (pertinence) sans dire à quoi il correspond exactement.
6) Passons aux résultats sur la feuille ad hoc et à leur forme
- en ligne 1 : les titres, donc
- en colonne 1, maintenant : quoi, exactement ?
- sur chaque ligne que doit-on avoir dans la première colonne qui suit un "groupe" ? à nouveau ce qu'il y avait en colonne 1 de ce "groupe" ????
etc ... etc ...
Il est regrettable que j'aie à te poser ces questions !
J'ai par ailleurs le sentiment de plus en plus net que tu n'es pas plus doué en exposé des tenants et aboutissants que tu ne l'es en VBA.
Je t'ai dit plus haut que je ne voulais pas de ton classeur xls.
Rien ne t'empêche par contre de déposer sur un site ad-hoc de partage les images suivantes :
- images de tes feuilles à traiter (avec des données pour plusieurs "projets" et "colis"
- image du résultat attendu
- en précisant ce que tu as choisi comme critère de "pertinence"

_________________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Ricoetienne - 15 nov. 2012 à 08:23
0
Utile
Merci UCFOUTU pour ta reponse,

Tu as totalement raison je n'y connais rien en VBA, mais je cherche....

1) Oui ttes les colonnes A des quatres feuilles contiennent les memes informations (BABA-1
.....
BABA-231)

2) Non toutes les colonnes ne sont pas remplies pour toutes les lignes car cela depend de l etat d avancement du colis, mais ces colonnes seront remplies avec le temps...(Projet sur plusieurs annees)

3) Oui, c est exactement le meme nombre de lignes sur toutes les feuilles.

4) Concernant la macro que j ai trouve, en effet il y avait cet element car avant sur la deuxieme ligne il y avait un 2
If l = 1 Then 'si première feuille on copie aussi les titres (première ligne)
Range(Cells(1, 1), Cells(i, j)).Select
Else
Range(Cells(2, 1), Cells(i, j)).Select 'sinon on copie qu'à partir de la ligne 2
End If

5) Pertinence car les informations dans ces colonnes sont importantes pour moi et doivent apparaitre dans ma synthese. Cela est totalement subjectif et lie a mon avis...Afin de reconnaitre ces colonnes, elles ont toutes le meme format "Synth-nom de la colonne"

6) En ligne 1, les titres des colonnes contenant des informations importantes.
En colonne 1 , les numeros de colis, puis les informations des colonnes importantes...

7) Je ne comprends pas ce que tu me demandes par la ?

[b]sur chaque ligne que doit-on avoir dans la première colonne qui suit un "groupe" ? à nouveau ce qu'il y avait en colonne 1 de ce "groupe" ????
etc ... etc .../b

Merci d avance
Commenter la réponse de Ricoetienne
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 15 nov. 2012 à 09:26
0
Utile
5) Pertinence car les informations dans ces colonnes sont importantes pour moi et doivent apparaitre dans ma synthese. Cela est totalement subjectif et lie a mon avis...Afin de reconnaitre ces colonnes, elles ont toutes le meme format "Synth-nom de la colonne"

6) En ligne 1, les titres des colonnes contenant des informations importantes.
En colonne 1 , les numeros de colis, puis les informations des colonnes importantes...

est vraiment vraiment vraiment flou !!! et ne me permet même pas de deviner le traitement à faire, ni même le critère de sélection ! Et le plus inquiétant est ceci :
Cela est totalement subjectif

La subjectivité et l'informatique ne font pas bon ménage et aucun programme informatique ne saurait faire une sélection sur des critères subjectifs ! Ils doivent être définis avec précision !
Ecoute : dépose, comme je te l'ai demandé, les images (captures d'écran) de tes feuilles et du résultat souhaité, en disant avec précision ce que tu as choisi de sélectionner (et sur quelle base).

____________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 15 nov. 2012 à 09:32
0
Utile
J'ajoute une chose très claire :
Si tes sélections ne correspondant pas à un critère clairement défini, si, donc, elles sont vraiment totalement "subjectives", elles ne sauraient qu'être faites manuellement, la subjectivité étant forcément le fait de l'homme. Mais qui dit sélection manuelle dit également que la sélection d'articles sur une des 4 feuilles à traiter doit être rigoureusement la même pour chacune des 3 autres feuilles (même nombre d'articles ET mêmes articles), ce qui rendrait très vulnérable ton application (dépendance absolue à l'étourderie, l'erreur, etc ...) !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Ricoetienne - 19 nov. 2012 à 04:54
0
Utile
Bonjour UCFOUTU,

Tout d'abord, merci pour ton temps et ta patience...


Je vais une derniere fois essayer de synthetiser ma demande et si cela ne marche pas je mettrai mes fichiers en ligne.

"J'ai besoin d'une macro qui soit capable sur la base d'une partie d'un nom de colonne, de me rapatrier l'ensemble des lignes

vides et non vides de cette derniere dans ma feuille de synthese en me conservant l'ordre etabli. En l'occurence pour mon fichier l'element de recherche

au sein des differentes feuilles sera:(Synth-).


Cette mention (Synth-) precedent le nom de la colonne sera ajoute par l'homme en fonction du degre d 'importance qu il confere a la colonne, donc

si il veut faire apparaitre cette derniere ou nom au sein de la feuille de synthese.

Les colonnes selectionnees et rapatriees dans la feuille synthese, viendront se juxtaposer les unes aux autres.


Cela ne pose pas de pb car les lignes comme nous l'evoquions precedement, sont rangees sur toutes les feuilles en ordre croissant grace au code colis

(BABA-1...jusqu'a BABA-231).

Par consequent toutes les feuilles ont le meme format ( Ex: SUR LA LIGNE 18, uniquement des informations concernant le colis BABA-17, etc)

J'espere avor ete plus precis.....


Merci d'avance Ucfoutu.
Commenter la réponse de Ricoetienne
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 nov. 2012 à 08:04
0
Utile
Désolé, mais ce n'est toujours pas suffisamment clair pour moi :
Je t'invite donc à nouveau (pour la troisième fois) :
Je t'ai dit plus haut que je ne voulais pas de ton classeur xls.
Rien ne t'empêche par contre de déposer sur un site ad-hoc de partage les images suivantes :
- images de tes feuilles à traiter (avec des données pour plusieurs "projets" et "colis"
- image du résultat attendu
- en précisant ce que tu as choisi comme critère de "pertinence"

Sache que j'ai déjà préparé quelque-chose, mais que je ne peux te proposer tant que ne sont pas levées TOUTES les incertitudes que je "vois" pour l'instant !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 nov. 2012 à 08:21
0
Utile
Bon ... Je dois sortir ...
Regarde ce que fait ceci (j'en suis là, à attendre de savoir TOUT) :

Dim plage_travail As Range, plage_a_copier As Range, c As Range, nb As Integer, critere As String
  feuilles_a_traiter = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4") '===> les feuilles à traiter
  critere = "a" '============>> le crière choisi
  For i = 0 To UBound(feuilles_a_traiter)
    Dim f As Worksheet
    Set f = Worksheets(feuilles_a_traiter(i))
    derlig = f.Range("A" & Rows.Count).End(xlUp).Row
    dercol = f.Cells(1, Columns.Count).End(xlToLeft).Column
    Set plage_travail = f.Range("A1:A" & derlig)
    For Each c In plage_travail
      If c.Value = critere Then
        If plage_a_copier Is Nothing Then
          Set plage_a_copier = f.Range(f.Cells(c.Row, nb + 1), f.Cells(c.Row, dercol))
        Else
          Set plage_a_copier = Union(plage_a_copier, f.Range(f.Cells(c.Row, nb + 1), f.Cells(c.Row, dercol)))
        End If
      End If
    Next
    If Not plage_a_copier Is Nothing Then
    
    
      ' et voilà où l'ambiguïté de tes explications me gêne !!!
      ' je ne sais si (entre autres), je dois par exemple écrire ceci :
         'ou = Worksheets("Feuil5").Cells(1, Columns.Count).End(xlToLeft).Column
         
        ' ou cela :
        
         Worksheets("Feuil5").UsedRange
         ou = Worksheets("Feuil5").Cells.SpecialCells(xlCellTypeLastCell).Column
         
         
      If i > 0 Then ou = ou + 1
      plage_a_copier.Copy Destination:=Worksheets("Feuil5").Cells(1, ou)
    End If
    If i 0 Then nb nb + 1
    Set plage_a_copier =  Nothing
  Next



Essai fait avec 5 feuilles dont au moins la colonne A et remplie et contient des "a" sauf en ce qui concerne la derère feuille (Feuil5", entièrement vide au départ

Si cela est ce que tu attendais ===>> Va bene.
Si non ===>> les "images" demandées vont être totalement indispensables.
Voilà !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Ricoetienne - 20 nov. 2012 à 02:12
0
Utile
Bonjour Ucfoutu,

Voici le lien de mon document


file upload storage


C est sous-format PDF, et non jpeg, j esoere que ca ira...

Merci d'avance.
Commenter la réponse de Ricoetienne

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Juxtaposition de plusieurs tableaux excel d un meme fichier, VBA - page 2