Bonjour,
Voila je voudrais créer une macro qui me permetrait de parcourir les cellules d'une colonne et de les réecrire sur une autre feuille selon un ordre spécifique. C'est à dire que chaque cellule de ma colonne X devient elle même une colonne.
Merci de ton aide voila ce que je veux faire :
J'ai une feuille comme ceci :
Colonne :
A B C D
1 Valeurx C1 D1
1 Valeur Y C2 D2
1 Valeur Z C3 D3
2 Valeur A C4 D4
2 Valeur B C5 D5
3 Valeur P C6 D6
4 Valeur F C7 D7
Je voudrais avoir une deuxième feuille en partant de la première pour avoir ceci :
Colonne
A C1 C2 C3 C4 C5 C6 C7
1 Valeurx Valeur Y ValeurZ
2 Valeur A Valeur B
3 Valeur P
4 Valeur F
Je voudrais récupérer les données de la colonne C et les transformer en colonne et récupérer les valeurs sur les autres colonnes.
Bonjour,
Parfait en faisant comme tu m'as dis ça marche mais pour un nombre limité de colonne et là j'ai des plus de 300000 enregistrements.
Merci de votre réponse
Si tu as plus de 300000 paramètres, tu ne peux pas les mettre tous en colonne. Excel étant limité à 256 colonnes et à 65536 lignes soit un total de 16777216 cellules, tu est obligé de les stocker en lignes et en colonnes.
A toi de trouver un format qui convient le mieux aux suites des opérations que tu veux mener à ces données.
Bizarre, on dirait que mon texte n'est pas passé.
Je voulais donc dire que je pensais avoir compris ce que tu voulais et que je vais te proposer quelque chose, soit patient.
Essaie ceci. Fais une sauvegarde de ton fichier avant, on ne sait jamais.
Il y a sûrement mieux, plus rapide, plus propre mais bon ...
Option Explicit
Sub tri()
Dim li As Integer, date_en_cours As Double
Dim li_first As Double, col_en_cours As Double
Dim col As Integer, décalage As Integer
Dim Texte As String
Dim li_fin As Integer, l As Integer
Application.ScreenUpdating = False ' permet de ne pas rafraichir l'écran à chaque étape et donc d'accélérer la macro
On Error GoTo fin
li = 1 ' on commence à la ligne 1
date_en_cours = Cells(li, 2) ' récupération de la date à la ligne li
Do While date_en_cours > 0 ' vrai si on n'est pas à la fin du fichier
li_first = li ' li où apparait pour la 1ère fois date_en_cours, ligne utilisée pour copier les données
col_en_cours = 4 ' on écrira les données à partir de la colonne col_en_cours
li = li + 1
col = 3
décalage = 0 ' compte le nombre de shift vers la droite réalisés
Texte = "toto" ' initialisation pour passer la boucle pour la 1ère fois
Do While Texte <> ""
Do While Cells(li, 2) = date_en_cours
If col_en_cours = col + décalage Then
col_en_cours = col_en_cours + 1
End If
If Cells(li_first, col_en_cours) <> "" Then
Cells(li_first, col_en_cours).Insert Shift:=xlToRight
décalage = décalage + 1
End If
Cells(li_first, col_en_cours) = Cells(li, col)
col_en_cours = col_en_cours + 1
li = li + 1
Loop
li_fin = li - 1
col = col + 1
li = li_first + 1
'
' Y-a-t-il encore des données à traiter dans la nouvelle colonne col
Texte = ""
For l = li To li_fin
Texte = Texte & Cells(l, col)
Next l
Loop
'
' suppression des lignes de même date (déjà traitées)
'
Do While Cells(li, 2) = date_en_cours
Rows(li).Delete
Loop
date_en_cours = Cells(li, 2) ' récupération de la date à la ligne li
Loop
fin:
Application.ScreenUpdating = True
End Sub
Dis-moi si cela te va. Lance la macro pas à pas pour comprendre comment ça marche.
Je viens de tester la macro de Didier et voila ce que j'ai :
, 84 2000-02-23 2003-02-24
, CLIENT2 2450 Données Vente Données8 Donnéesx
, CLIENT1, , , , ----
, Alors que je voudrais avoir ceci:
, , Données y DonnéesZ
84, 2000-02-23 , CLIENT2 2450, CLIENT1, , , , ----
84, 2003-02-24 , Données Vente Données8 Donnéesx , Données y DonnéesZ
C'est-à-dire pour chaque date et N° ID(84) le regroupement indiqué comme ci-dessus.
Merci
Bonjour,
Oui effectivement c'est cela même. Ca marche à 2 détail prés :
- Lorsque deux dates identiques se suivent et mais n'ayant pas le même N° ID, elles sont regroupées ensemble et le N° ID de la seconde date disparait de la liste. Serait-il possible de faire N°ID->date.
- Lorsque les données de plusieures dates identiques sont regroupées elles changent de cellule. Serait-il possible qu'elles gardent la même cellule. Ceci me permetrait de faire des tris et selections sur sur les cellules de mêmes type de données.
Pour le premier point, c'est effectivement possible :Tout comme on a mémorisé la date en cours (date_en_cours Cells(li, 2)), tu dois mémorisé aussi de n° d'ID : ID_en_cours Cells(li, 1). Attention : à faire au bébut et en fin de programme.Ensuite, tu modifies le test Do While Cells(li, 2) date_en_cours par Do While Cells(li, 2) date_en_cours and Cells(li,1)=ID_en_cours. Attention : à faire au bébut et en fin de programme.
Pour le deuxième point, là je ne comprends plus ce que tu veux ! Dans ton exemple du vendredi 31 octobre 2008 à 14:44:45, tu changes les cellules de position pour qu'elle se retrouvent sur la même ligne que la date.
Je pense que maintenant, tu dois pouvoir partir de la macro que j'ai réalisée et te lancer dans ses modifications.
Merci ce ta réponse .
Oui effectivement ce que je veux dire par là c'est qu'en regroupant les données de même date et même N°ID serait-il possible qu'elles gardent leur même position mais sur une seule ligne c'est-à-dire remonter d'un cran sur la même colonne:
Exemple :
48 01/10/2008 Z
48 01/10/2008 A B
Avoir ceci :
Il me semblait que tu pouvais avoir des données (même ID et date) dans la même colonne, ce qui nécessite de changer de colonne (ou d'écraser des données).