Besoin d'aide (concatenation)
Résolu/Fermé
Eldyviah
Messages postés
30
Date d'inscription
mercredi 13 avril 2016
Statut
Membre
Dernière intervention
20 avril 2016
-
18 avril 2016 à 13:53
Eldyviah Messages postés 30 Date d'inscription mercredi 13 avril 2016 Statut Membre Dernière intervention 20 avril 2016 - 20 avril 2016 à 16:57
Eldyviah Messages postés 30 Date d'inscription mercredi 13 avril 2016 Statut Membre Dernière intervention 20 avril 2016 - 20 avril 2016 à 16:57
A voir également:
- Besoin d'aide (concatenation)
- Concaténation pdf - Guide
- Problème sur formule Concatenation - Forum Excel
- Faire une concaténation avec des #N/A? ✓ - Forum Excel
- Concaténation de boucles VB - Forum VB / VBA
- Concaténation du contenu de fichier.txt - Forum Programmation
3 réponses
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
18 avril 2016 à 14:07
18 avril 2016 à 14:07
Bonjoue Eldyviah, bon jour le forum,
Peut-être comme ça :
Peut-être comme ça :
Sub ConcatenationFeuilles() '*************************************************************************************************** 'ce code va copier la plage A2:A... jusqu'à DL de chaque onglet dont le nom commence par "STRUCTURE" 'et va la coller dans la première cellule vide de la colonne A de l'onglet "RECAP" '*************************************************************************************************** Dim O As Worksheet 'déclare la variable O (Onglets) Dim R As Worksheet 'déclare la variable R (onglet Recap) Dim DL As Long 'déclare la variable DL (Derniere Ligne) Dim DEST As Range 'déclare la variable DEST (cellule de DESTination) Feuil10.Cells.Clear '?? Set R = Sheets("RECAP") 'définit l'onglet R For Each O In Sheets 'boucle sur tous les onglets O du classeur If Left(O.Name, 9) = "STRUCTURE" Then DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne 1 (=A) de l'onglet O Set DEST = R.Cells(Application.Rows.Count, 1).End(xup).Offset(1, 0) 'définit la cellule de destination DEST (première cellule vide de la colonne 1 (=A) de l'onglet R) O.Range("A2:L" & DL).Copy DEST 'copy la plage A2:A... jusqu'à DL de l'onglet O de la boucle et la colle dans DEST End If 'fin de la condition Next O 'prochain onglet de la boucle End Sub
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 778
18 avril 2016 à 14:43
18 avril 2016 à 14:43
Bonjour,
Peut-être :
Peut-être :
Sub ConcatenationFeuilles() Dim w As Worksheet 'feuille Dim r As Range 'plage à copier Dim c As Range 'cellule de destination Dim n As String 'nom des feuilles à copier Feuil10.Cells.Clear Set c = Feuil10.Range("A2") n = "/STRUCTURE/STRUCTURE1/STRUCTURE2/STRUCTURE3/STRUCTURE4/" For Each w In Worksheets With w If InStr(1, n, "/" & w.Name & "/") > 0 Then With .Range(.Cells(.Rows.Count, "A").End(xlUp), "L2") .Copy c Set c = c.Offset(.Rows.Count) End With End If End With Next w End Sub
Eldyviah
Messages postés
30
Date d'inscription
mercredi 13 avril 2016
Statut
Membre
Dernière intervention
20 avril 2016
18 avril 2016 à 15:04
18 avril 2016 à 15:04
Merci Patrice,
Il y a deux points sur lesquels j'aimerais que tu éclaircisses mon esprit, si tu le veux bien:
Premièrement -> Feuil10.Range("A2") pourquoi ("A2")
Deuxièmement ->Je comprends pas le code à partir de if
Merci d'avance
Il y a deux points sur lesquels j'aimerais que tu éclaircisses mon esprit, si tu le veux bien:
Premièrement -> Feuil10.Range("A2") pourquoi ("A2")
Deuxièmement ->Je comprends pas le code à partir de if
Merci d'avance
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 778
Modifié par Patrice33740 le 18/04/2016 à 15:38
Modifié par Patrice33740 le 18/04/2016 à 15:38
Re,
Premièrement :
Tu n'as pas précisé où tu veux copier tes données, tu peux les mettre ailleurs.
Deuxièmement :
InStr(1, n, "/" & w.Name & "/") > 0
permet de vérifier que le nom de la feuille, se situe dans la liste des noms avec un / devant et un / derrière pour être sur de tester le nom exact.
.Range(.Cells(.Rows.Count, "A").End(xlUp), "L2")
définit la plage de cellules depuis la dernière ligne de la colonne A jusqu'à L2 (les 2 diagonales définissent la même plage !)
.Copy c
copie la plage vers la cellule c
Set c = c.Offset(.Rows.Count)
Définit la prochaine cellule de destination (décalée vers la bas en fonction du nombre de lignes de la plage copiée)
Edit : Pour obtenir l'aide VBA sur un mot : places le curseur dessus et tapes F1
Premièrement :
Tu n'as pas précisé où tu veux copier tes données, tu peux les mettre ailleurs.
Deuxièmement :
InStr(1, n, "/" & w.Name & "/") > 0
permet de vérifier que le nom de la feuille, se situe dans la liste des noms avec un / devant et un / derrière pour être sur de tester le nom exact.
.Range(.Cells(.Rows.Count, "A").End(xlUp), "L2")
définit la plage de cellules depuis la dernière ligne de la colonne A jusqu'à L2 (les 2 diagonales définissent la même plage !)
.Copy c
copie la plage vers la cellule c
Set c = c.Offset(.Rows.Count)
Définit la prochaine cellule de destination (décalée vers la bas en fonction du nombre de lignes de la plage copiée)
Edit : Pour obtenir l'aide VBA sur un mot : places le curseur dessus et tapes F1
Eldyviah
Messages postés
30
Date d'inscription
mercredi 13 avril 2016
Statut
Membre
Dernière intervention
20 avril 2016
18 avril 2016 à 16:01
18 avril 2016 à 16:01
Merci pour les précisions,
Je vais donc t'éclairer pour que tu puisses m'aider correctement alors =)
Je veux copier les valeurs et les mettre dans la feuille recap
Je viens de comprendre merci pour cette indication, concernant le test exact du nom, ça pourra me servir de nouveau dans mes futurs macros.
Pour Set c = c.Offset(.Rows.Count) j'ai un bug d'exec (1004)
Merci pour l'info je m'en servirai à l'avenir
Je vais donc t'éclairer pour que tu puisses m'aider correctement alors =)
Je veux copier les valeurs et les mettre dans la feuille recap
Je viens de comprendre merci pour cette indication, concernant le test exact du nom, ça pourra me servir de nouveau dans mes futurs macros.
Pour Set c = c.Offset(.Rows.Count) j'ai un bug d'exec (1004)
Merci pour l'info je m'en servirai à l'avenir
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 778
18 avril 2016 à 18:49
18 avril 2016 à 18:49
Le bug, avec quel code exactement (code complet) ?
Eldyviah
Messages postés
30
Date d'inscription
mercredi 13 avril 2016
Statut
Membre
Dernière intervention
20 avril 2016
19 avril 2016 à 09:48
19 avril 2016 à 09:48
Bonjour Patrice,
Le code que vous m'avez transmis je l'ai adapté en fonction des informations que j'ai besoin de traiter et ça me met un bug d'exec à chaque fois est-ce normal ou est-ce moi qui ait fait une fausse manip ?
Le code que vous m'avez transmis je l'ai adapté en fonction des informations que j'ai besoin de traiter et ça me met un bug d'exec à chaque fois est-ce normal ou est-ce moi qui ait fait une fausse manip ?
Pierre1310
Messages postés
8564
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
21 juillet 2020
649
18 avril 2016 à 16:03
18 avril 2016 à 16:03
Bonjour,
Copy c'est ce que tu veux faire?
Copy c'est ce que tu veux faire?
Eldyviah
Messages postés
30
Date d'inscription
mercredi 13 avril 2016
Statut
Membre
Dernière intervention
20 avril 2016
18 avril 2016 à 16:08
18 avril 2016 à 16:08
Re,
Oui c'est ce que j'aimerai faire
Oui c'est ce que j'aimerai faire
18 avril 2016 à 14:19
Concrètement le code que tu me proposes me parait intéressant cependant le nom de mes feuilles varient et ne suit pas une logique (STUCTURE,STRCUTURE1,...)
Est-ce que par hasard l'utilisation d'un else pourrais me permettre de sélectionner les autre cas ?
Si oui comment faire pour que la macro ne colle pas sur la plage déjà collée par la partie de code précédente
Merci d'avance