Parcourir une colone

Signaler
Messages postés
10
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
4 novembre 2008
-
Messages postés
10
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
4 novembre 2008
-
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

21 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
52
Salut,
C'est bien de nous exposer ce que tu voudrais faire, mais c'est où que tu coinces exactement?

As tu commencé quelques chose?

@+: Ju£i€n
Pensez: Réponse acceptée
Messages postés
10
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
4 novembre 2008

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.

Merci

 
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
52
Salut,
je répète.

"C'est bien de nous exposer ce que tu voudrais faire, mais c'est où que tu coinces exactement?"

@+: Ju£i€n
Pensez: Réponse acceptée
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Si tu le fais manuellement en copiant ta plage et en utilisant
collage spécial / transposé
est-ce que ça donne ce que tu recherches ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
10
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
4 novembre 2008

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
Messages postés
33
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2008
1
Bonjour,

Excel est limité à 256 colonnes ! Tu devrais plutôt travailler en ligne.

Didier
Messages postés
10
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
4 novembre 2008

Bonjour,
Merci  de ta réponse que veux tu dire par travailler par ligne?

Merci
Messages postés
33
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2008
1
Bonjour,

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.

Didier
Messages postés
10
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
4 novembre 2008

Voilà ce que j'ai :

<colgroup><col style=\"WIDTH: 60pt\" width=\"80\" /><col style=\"WIDTH: 115pt; mso-width-source: userset; mso-width-alt: 5595\" width=\"153\" /><col style=\"WIDTH: 236pt; mso-width-source: userset; mso-width-alt: 11520\" width=\"315\" /><col style=\"WIDTH: 134pt; mso-width-source: userset; mso-width-alt: 6546\" width=\"179\" /><col style=\"WIDTH: 109pt; mso-width-source: userset; mso-width-alt: 5302\" width=\"145\" /><col style=\"WIDTH: 60pt\" width=\"80\" /><col style=\"WIDTH: 122pt; mso-width-source: userset; mso-width-alt: 5924\" width=\"162\" /></colgroup>----
   84,         2000-02-23,     2450, ,  , , , ----
        84,         2000-02-23, CLIENT2, CLIENT1,     , , , ----
,  84   2003-02-24 , Données, Donnéesx,      , , , ----
84,         2003-02-24 , Vente, Données y,      , , , ----
84,         2003-02-24 , Données8, DonnéesZ,      , ,

Et voila ce que je voudrai avoir : Regrouper toutes les colonnes de même date sur une même ligne

<colgroup><col style=\"WIDTH: 60pt\" width=\"80\" /><col style=\"WIDTH: 115pt; mso-width-source: userset; mso-width-alt: 5595\" width=\"153\" /><col style=\"WIDTH: 236pt; mso-width-source: userset; mso-width-alt: 11520\" width=\"315\" /><col style=\"WIDTH: 134pt; mso-width-source: userset; mso-width-alt: 6546\" width=\"179\" /><col style=\"WIDTH: 109pt; mso-width-source: userset; mso-width-alt: 5302\" width=\"145\" /><col style=\"WIDTH: 60pt\" width=\"80\" /><col style=\"WIDTH: 122pt; mso-width-source: userset; mso-width-alt: 5924\" width=\"162\" /></colgroup>----
, , , , , , , ----
84,   2000-02-23 , CLIENT2               2450, CLIENT1,  , , , ----
84,   2003-02-24 , Données  Vente   Données8      Donnéesx   , Données y   DonnéesZ, , , , ----
, , , , , , , ----
, Merci de votre aide, , , , ,
Messages postés
33
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2008
1
Didier
Messages postés
33
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2008
1
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.

Didier
Messages postés
33
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2008
1
Voilà,

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.

Didier
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Un tableau croisé dynamique pourrait peut-être t'aider (?)
Messages postés
10
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
4 novembre 2008

Bonjour,
Merci de votre aide je teste et je reviens vers vous.

Merci
Messages postés
10
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
4 novembre 2008

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
Messages postés
33
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2008
1
Bonsoir,
Etonnant ! J'ai supposé que le n° d'ID était en colonna A et la date en colonne B. Est-ce bien le cas ?
Modifie la macro en conséquence.

Didier
Messages postés
10
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
4 novembre 2008

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.

Merci
Messages postés
33
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2008
1
Bonjour,

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.

Didier
Messages postés
10
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
4 novembre 2008

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 :

48   01/10/2008     A       Z       B
 au lieu de :

48    01/10/2008    Z     A     B

Merci de ton aide si précieuse
Messages postés
33
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
25 novembre 2008
1
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).

Didier