En VBA, extraire d'un tableau des cellules côte à côte pour les mettre les unes sous les autres dans une seule colonne
4 réponses
G. L
Bonsoir à vous tous,
Un sujet que je n'arrive pas à résoudre, comment feriez vous SVP ? :
En VBA, extraire d'un tableau des cellules côte à côte pour les mettre les
unes sous les autres dans une seule colonne
Exemple :
Dans un tableau de plusieurs colonnes et environ 12 clefs différentes de 1 à
10 lignes :
Sujet Page Clef Ligne Texte
Ouf page 15 225971 1 Faire chauffer l'eau avec une
pincée de sel
Ouf page 15 225971 2 Porter à ébullition
Ouf page 15 225971 3 Laisser frémir 9 minutes
Ouf page 15 225971 4 Refroidir
Ouf page 16 225971 5 Ecaler et couper en deux
Poireau page 18 225972 1 Choisir les poireaux de grosseur
régulière
Poireau page 19 225972 2 Enlever les feuilles flétries
Poireau page 19 225972 3 Fendre en deux dans la longueur
Poireau page 19 225972 4 Couper en fines lamelles
Poireau page 19 225972 5 Faire cuire à la vapeur
Pour obtenir ceci :
Ouf - page 15 n° 225971 (le sujet - la 1ère page & n° la clef)
- Faire chauffer l'eau avec une pincée de sel (ligne 1)
- Porter à ébullition (ligne 2)
- Laisser frémir 9 minutes (ligne 3)
- Refroidir (ligne 4)
- Ecaler et couper en deux (ligne 5......)
Poireau - Page 18 n° 225972
- Choisir les poireaux de grosseur régulière
- Enlever les feuilles flétries
- Fendre en deux dans la longueur
- Couper en fines lamelles
- Faire cuire à la vapeur
Vous l'avez compris, je ne sais même pas faire cuire un ouf, mais j'ai faim
et envie de poireaux !
Vous l'avez compris, je ne sais même pas faire cuire un ouf, mais j'ai faim
et envie de poireaux !
J'ai bien une idée de ce qu'on peut faire avec un poireau ici : http://radicalcorp.info/loituma/loituma.swf ;-)
Cordialement, Trirème
Trirème
Si tu n'es pas couché à cette heure tardive, je peux te proposer la grande s½ur de la précédente ici : http://www.koreus.com/animation/loituma-manga.html
...et puisque tu le mérites surement, cette macro, à adapter selon le nombre de tes colonnes. Le code est d'autant plus simple que je suppose tes données triées au départ (important). Si tel n'était pas le cas tu n'as qu'à revenir ici :
Sub RecettesEnLigne() ' MPFE le 4 octobre 2007, 21h40 (GMT+0200) ' De : G. ' Sujet : En VBA, extraire d'un tableau des cellules côte à côte ' pour les mettre les unes sous les autres dans une seule colonne ' Réponse de Trirème
' Au début, la feuille active est celle contenant les recettes en "colonnes". ' La macro ajoute une feuille pour y transcrire en lignes ' les données côte à côte de la feuille de départ
Dim LigneSource As Double, LigneDest As Double Dim Sujet As String, SujetEnCours As String Dim CotesACotes As Worksheet, EnLigne As Worksheet
LigneSource = 2: LigneDest = 1 Set CotesACotes = ActiveSheet Set EnLigne = Sheets.Add EnLigne.Name = "Recettes" ' Erreur si elle existe déjà
With CotesACotes Sujet = .Range("A" & LigneSource) Do Until Sujet = "" If Sujet <> SujetEnCours Then ' Éventuellement faire un saut de ligne ici : LigneDest = LigneDest + 1 SujetEnCours = Sujet EnLigne.Range("A" & LigneDest) = Sujet & " - " & _ .Range("B" & LigneSource) & " n°" & .Range("C" & LigneSource) LigneDest = LigneDest + 1 EnLigne.Range("A" & LigneDest) = "- " & .Range("E" & LigneSource) LigneDest = LigneDest + 1 LigneSource = LigneSource + 1 Else EnLigne.Range("A" & LigneDest) = "- " & .Range("E" & LigneSource) LigneDest = LigneDest + 1 LigneSource = LigneSource + 1 End If Sujet = .Range("A" & LigneSource) Loop End With End Sub
Cordialement, Trirème
;-)))
Au moins ça détend !!! Gérard
"Trirème" a écrit dans le message de news:
Vous l'avez compris, je ne sais même pas faire cuire un ouf, mais j'ai faim
et envie de poireaux ! J'ai bien une idée de ce qu'on peut faire avec un poireau
Si tu n'es pas couché à cette heure tardive, je peux te proposer la grande s½ur
de la précédente ici : http://www.koreus.com/animation/loituma-manga.html
...et puisque tu le mérites surement, cette macro, à adapter selon le nombre de
tes colonnes. Le code est d'autant plus simple que je suppose tes données triées
au départ (important). Si tel n'était pas le cas tu n'as qu'à revenir ici :
Sub RecettesEnLigne()
' MPFE le 4 octobre 2007, 21h40 (GMT+0200)
' De : G. L@rumeur
' Sujet : En VBA, extraire d'un tableau des cellules côte à côte
' pour les mettre les unes sous les autres dans une seule colonne
' Réponse de Trirème
' Au début, la feuille active est celle contenant les recettes en "colonnes".
' La macro ajoute une feuille pour y transcrire en lignes
' les données côte à côte de la feuille de départ
Dim LigneSource As Double, LigneDest As Double
Dim Sujet As String, SujetEnCours As String
Dim CotesACotes As Worksheet, EnLigne As Worksheet
LigneSource = 2: LigneDest = 1
Set CotesACotes = ActiveSheet
Set EnLigne = Sheets.Add
EnLigne.Name = "Recettes" ' Erreur si elle existe déjà
With CotesACotes
Sujet = .Range("A" & LigneSource)
Do Until Sujet = ""
If Sujet <> SujetEnCours Then
' Éventuellement faire un saut de ligne ici : LigneDest = LigneDest + 1
SujetEnCours = Sujet
EnLigne.Range("A" & LigneDest) = Sujet & " - " & _
.Range("B" & LigneSource) & " n°" & .Range("C" & LigneSource)
LigneDest = LigneDest + 1
EnLigne.Range("A" & LigneDest) = "- " & .Range("E" & LigneSource)
LigneDest = LigneDest + 1
LigneSource = LigneSource + 1
Else
EnLigne.Range("A" & LigneDest) = "- " & .Range("E" & LigneSource)
LigneDest = LigneDest + 1
LigneSource = LigneSource + 1
End If
Sujet = .Range("A" & LigneSource)
Loop
End With
End Sub
Cordialement,
Trirème
;-)))
Au moins ça détend !!!
Gérard
"Trirème" <NoOne@EvryOuer.fr> a écrit dans le message de
news:ub64MIsBIHA.3456@TK2MSFTNGP04.phx.gbl...
Vous l'avez compris, je ne sais même pas faire cuire un ouf, mais j'ai
faim
et envie de poireaux !
J'ai bien une idée de ce qu'on peut faire avec un poireau
Si tu n'es pas couché à cette heure tardive, je peux te proposer la grande s½ur de la précédente ici : http://www.koreus.com/animation/loituma-manga.html
...et puisque tu le mérites surement, cette macro, à adapter selon le nombre de tes colonnes. Le code est d'autant plus simple que je suppose tes données triées au départ (important). Si tel n'était pas le cas tu n'as qu'à revenir ici :
Sub RecettesEnLigne() ' MPFE le 4 octobre 2007, 21h40 (GMT+0200) ' De : G. ' Sujet : En VBA, extraire d'un tableau des cellules côte à côte ' pour les mettre les unes sous les autres dans une seule colonne ' Réponse de Trirème
' Au début, la feuille active est celle contenant les recettes en "colonnes". ' La macro ajoute une feuille pour y transcrire en lignes ' les données côte à côte de la feuille de départ
Dim LigneSource As Double, LigneDest As Double Dim Sujet As String, SujetEnCours As String Dim CotesACotes As Worksheet, EnLigne As Worksheet
LigneSource = 2: LigneDest = 1 Set CotesACotes = ActiveSheet Set EnLigne = Sheets.Add EnLigne.Name = "Recettes" ' Erreur si elle existe déjà
With CotesACotes Sujet = .Range("A" & LigneSource) Do Until Sujet = "" If Sujet <> SujetEnCours Then ' Éventuellement faire un saut de ligne ici : LigneDest = LigneDest + 1 SujetEnCours = Sujet EnLigne.Range("A" & LigneDest) = Sujet & " - " & _ .Range("B" & LigneSource) & " n°" & .Range("C" & LigneSource) LigneDest = LigneDest + 1 EnLigne.Range("A" & LigneDest) = "- " & .Range("E" & LigneSource) LigneDest = LigneDest + 1 LigneSource = LigneSource + 1 Else EnLigne.Range("A" & LigneDest) = "- " & .Range("E" & LigneSource) LigneDest = LigneDest + 1 LigneSource = LigneSource + 1 End If Sujet = .Range("A" & LigneSource) Loop End With End Sub
Cordialement, Trirème
;-)))
Au moins ça détend !!! Gérard
"Trirème" a écrit dans le message de news:
Vous l'avez compris, je ne sais même pas faire cuire un ouf, mais j'ai faim
et envie de poireaux ! J'ai bien une idée de ce qu'on peut faire avec un poireau
Merci beaucoup pour ce très sérieux coup de main. Maintenant, je dois pouvoir résoudre mon problème, car ta proposition est parfaite. Et si je bloque à nouveau alors je suivrai ton conseil, je reviendrai avec un nouveau légume ;-) Les données sont bien triées (croissant) par N° de clef et n° de ligne. Désolé de te répondre aussi tardivement, bien que j'ai lu ta réponse très tôt ce matin, mais je n'étais pas sur ma machine préférée ;) Finalement, le sujet des poireaux (judicieusement choisi ;-) s pas ? ) m'a conduit dans un univers jusqu'alors inconnu, riche en surprises, merci également pour cette découverte. C'est fou ce que j'aimerai rajeunir !
...et puisque tu le mérites surement ==> A que oui !!! ;)
Cordialement. Gérard
"Trirème" a écrit dans le message de news:%
Si tu n'es pas couché à cette heure tardive, je peux te proposer la grande s½ur
de la précédente ici : http://www.koreus.com/animation/loituma-manga.html
...et puisque tu le mérites surement, cette macro, à adapter selon le nombre de
tes colonnes. Le code est d'autant plus simple que je suppose tes données triées
au départ (important). Si tel n'était pas le cas tu n'as qu'à revenir ici :
Sub RecettesEnLigne() ' MPFE le 4 octobre 2007, 21h40 (GMT+0200) ' De : G. ' Sujet : En VBA, extraire d'un tableau des cellules côte à côte ' pour les mettre les unes sous les autres dans une seule colonne ' Réponse de Trirème
' Au début, la feuille active est celle contenant les recettes en "colonnes".
' La macro ajoute une feuille pour y transcrire en lignes ' les données côte à côte de la feuille de départ
Dim LigneSource As Double, LigneDest As Double Dim Sujet As String, SujetEnCours As String Dim CotesACotes As Worksheet, EnLigne As Worksheet
LigneSource = 2: LigneDest = 1 Set CotesACotes = ActiveSheet Set EnLigne = Sheets.Add EnLigne.Name = "Recettes" ' Erreur si elle existe déjà
With CotesACotes Sujet = .Range("A" & LigneSource) Do Until Sujet = "" If Sujet <> SujetEnCours Then ' Éventuellement faire un saut de ligne ici : LigneDest LigneDest + 1 SujetEnCours = Sujet EnLigne.Range("A" & LigneDest) = Sujet & " - " & _ .Range("B" & LigneSource) & " n°" & .Range("C" & LigneSource) LigneDest = LigneDest + 1 EnLigne.Range("A" & LigneDest) = "- " & .Range("E" & LigneSource)
Merci beaucoup pour ce très sérieux coup de main. Maintenant, je dois
pouvoir résoudre mon problème, car ta proposition est parfaite. Et si je
bloque à nouveau alors je suivrai ton conseil, je reviendrai avec un nouveau
légume ;-)
Les données sont bien triées (croissant) par N° de clef et n° de ligne.
Désolé de te répondre aussi tardivement, bien que j'ai lu ta réponse très
tôt ce matin, mais je n'étais pas sur ma machine préférée ;)
Finalement, le sujet des poireaux (judicieusement choisi ;-) s pas ? ) m'a
conduit dans un univers jusqu'alors inconnu, riche en surprises, merci
également pour cette découverte. C'est fou ce que j'aimerai rajeunir !
...et puisque tu le mérites surement ==> A que oui !!! ;)
Cordialement.
Gérard
"Trirème" <NoOne@EvryOuer.fr> a écrit dans le message de
news:%23XwfPRtBIHA.1188@TK2MSFTNGP04.phx.gbl...
Si tu n'es pas couché à cette heure tardive, je peux te proposer la grande
s½ur
de la précédente ici : http://www.koreus.com/animation/loituma-manga.html
...et puisque tu le mérites surement, cette macro, à adapter selon le
nombre de
tes colonnes. Le code est d'autant plus simple que je suppose tes données
triées
au départ (important). Si tel n'était pas le cas tu n'as qu'à revenir ici
:
Sub RecettesEnLigne()
' MPFE le 4 octobre 2007, 21h40 (GMT+0200)
' De : G. L@rumeur
' Sujet : En VBA, extraire d'un tableau des cellules côte à côte
' pour les mettre les unes sous les autres dans une seule colonne
' Réponse de Trirème
' Au début, la feuille active est celle contenant les recettes en
"colonnes".
' La macro ajoute une feuille pour y transcrire en lignes
' les données côte à côte de la feuille de départ
Dim LigneSource As Double, LigneDest As Double
Dim Sujet As String, SujetEnCours As String
Dim CotesACotes As Worksheet, EnLigne As Worksheet
LigneSource = 2: LigneDest = 1
Set CotesACotes = ActiveSheet
Set EnLigne = Sheets.Add
EnLigne.Name = "Recettes" ' Erreur si elle existe déjà
With CotesACotes
Sujet = .Range("A" & LigneSource)
Do Until Sujet = ""
If Sujet <> SujetEnCours Then
' Éventuellement faire un saut de ligne ici : LigneDest LigneDest + 1
SujetEnCours = Sujet
EnLigne.Range("A" & LigneDest) = Sujet & " - " & _
.Range("B" & LigneSource) & " n°" & .Range("C" & LigneSource)
LigneDest = LigneDest + 1
EnLigne.Range("A" & LigneDest) = "- " & .Range("E" &
LigneSource)
Merci beaucoup pour ce très sérieux coup de main. Maintenant, je dois pouvoir résoudre mon problème, car ta proposition est parfaite. Et si je bloque à nouveau alors je suivrai ton conseil, je reviendrai avec un nouveau légume ;-) Les données sont bien triées (croissant) par N° de clef et n° de ligne. Désolé de te répondre aussi tardivement, bien que j'ai lu ta réponse très tôt ce matin, mais je n'étais pas sur ma machine préférée ;) Finalement, le sujet des poireaux (judicieusement choisi ;-) s pas ? ) m'a conduit dans un univers jusqu'alors inconnu, riche en surprises, merci également pour cette découverte. C'est fou ce que j'aimerai rajeunir !
...et puisque tu le mérites surement ==> A que oui !!! ;)
Cordialement. Gérard
"Trirème" a écrit dans le message de news:%
Si tu n'es pas couché à cette heure tardive, je peux te proposer la grande s½ur
de la précédente ici : http://www.koreus.com/animation/loituma-manga.html
...et puisque tu le mérites surement, cette macro, à adapter selon le nombre de
tes colonnes. Le code est d'autant plus simple que je suppose tes données triées
au départ (important). Si tel n'était pas le cas tu n'as qu'à revenir ici :
Sub RecettesEnLigne() ' MPFE le 4 octobre 2007, 21h40 (GMT+0200) ' De : G. ' Sujet : En VBA, extraire d'un tableau des cellules côte à côte ' pour les mettre les unes sous les autres dans une seule colonne ' Réponse de Trirème
' Au début, la feuille active est celle contenant les recettes en "colonnes".
' La macro ajoute une feuille pour y transcrire en lignes ' les données côte à côte de la feuille de départ
Dim LigneSource As Double, LigneDest As Double Dim Sujet As String, SujetEnCours As String Dim CotesACotes As Worksheet, EnLigne As Worksheet
LigneSource = 2: LigneDest = 1 Set CotesACotes = ActiveSheet Set EnLigne = Sheets.Add EnLigne.Name = "Recettes" ' Erreur si elle existe déjà
With CotesACotes Sujet = .Range("A" & LigneSource) Do Until Sujet = "" If Sujet <> SujetEnCours Then ' Éventuellement faire un saut de ligne ici : LigneDest LigneDest + 1 SujetEnCours = Sujet EnLigne.Range("A" & LigneDest) = Sujet & " - " & _ .Range("B" & LigneSource) & " n°" & .Range("C" & LigneSource) LigneDest = LigneDest + 1 EnLigne.Range("A" & LigneDest) = "- " & .Range("E" & LigneSource)