Macro - deplacer des cellules en fonction de valeurs de cell

Salut à tous,

Je débute sur excel, je suis un novice en macro, j'ai fait qqs macro via l'enregistreur... certaines ont fonctionné, mais celle ci ne fonctionne pas !! je vous explique mon problème.

je récupère des fichiers csv que je veux mettre en forme pour pouvoir analyser les données plus facilement.

J'ai un tableau avec 4 colonnes et 300 lignes (pour simplifier).

Colonne 1 : la date

colonne 2: l'heure

Colonne 3: Les 100 premières lignes sont le mot "débit", les 100 suivantes le mot "taux" et les 100 dernières le mot "vitesse",

Colonne 4: les 100 premières lignes sont la valeur du débit, les 100 suivantes la valeur du taux et les 100 dernières la valeur de la vitesse.

Je veux obtenir 5 colonnes de 100 lignes:

Colonne 1 : la date

colonne 2: l'heure

colonne 3 : la valeur du débit

colonne 4: la valeur du taux

colonne 3 : la valeur de la vitesse

EDIT: petite precision. j'ai pris 100 mais c'est variable d'un fichier a l'autre. IL faut faire le controle de l'attribut (debit, taux ou vitesse) et le ranger dans l'ordre sur une autre colonne en fait)

Si vous avez une idee, ca me serait très utile. Avec l'enregistreur de macro, et le filtre auto sur la colonne 3 (je selectionne la vitesse, ca filtre, je copie/colle dans une autre colonne, etc.. mais ca ne marche pas...

Merci a vous

Modifié par chingy1997 le 28/01/2014 à 16:36

Bonsoir,

une proposition, à tester sur une copie de ton fichier

Sub vasy()
dl = Range("C" & Rows.Count).End(xlUp).Row
col = 4
li = 1
ref = ""
For i = 2 To dl
If Cells(i, 3) <> ref Then col = col + 1: Cells(1, col) = Cells(i, 3): ref = Cells(i, 3): li = 2
Cells(li, col) = Cells(i, 4)
li = li + 1
Next i
Columns("C:D").Delete shift:=xlToLeft
End Sub

Bonsoir,

Merci pour ta réponse. Je teste demain, au bureau...

Mais je ne vois pas ni les mots debit, ni taux ni vitesse dans ton texte ?

Chingy1997

Chingy1997 a écrit :

Bonsoir,

Merci pour ta réponse. Je teste demain, au bureau...

Mais je ne vois pas ni les mots debit, ni taux ni vitesse dans ton texte ?

Chingy1997

re-bonsoir,

d'après ce que j'ai compris de la manière dont ton tableau est organisé, je t'ai proposé une algorithme qui n'a pas besoin de ces mots.

Bonjour,

je viens de tester et ca ne fonctionne pas très bien

En fait, ca supprime des colonnes, rien de plus.

J'envoie en PJ le fichier réel (très allégé - 22k lignes sinon) pour aider à la compréhension de mon problème..

C'est galère, ces macros

Merci de votre aide.

Chingy1997

53classeur1.xls (19.00 Ko)

bonsoir,

le code fonctionne très bien sur base de la demande que tu as faite. cependant ton fichier ne correspond pas à ce que tu as décrit dans ta demande initiale

les données ne sont pas en colonnes 1,2,3,et 4 mais en colonnes 9,10,11 et 12.

voici une version adaptée à ton fichier

Sub vasy()
dl = Range("K" & Rows.Count).End(xlUp).Row
col = 12
li = 1
ref = ""
For i = 2 To dl
If Cells(i, 11) <> ref Then col = col + 1: Cells(1, col) = Cells(i, 11): ref = Cells(i, 11): li = 2
Cells(li, col) = Cells(i, 12)
li = li + 1
Next i
exit sub ' enlever cette instruction si tu souhaites faire le delete des lignes et colonnes devenues superflues.
'supprimer les colonnes K et L
Columns("k:l").Delete shift:=xlToLeft
' supprimer les lignes taux et vitesse
Rows(li & ":" & dl).Delete

End Sub

Merci de ton aide j'essaie demain.

Bonne soiree.

je sais pas ce qui se passe mais ca marche pas...

Rien ne se passe en fait ??

Sub MEF5()
    Dim derlig As Long, nbData As Long, nbData2 As Long, nbData3 As Long
    derlig = Cells(Rows.Count, 1).End(xlUp).Row
    nbData = Evaluate("COUNTIF(K:K,""Débit"")")
    nbData2 = Evaluate("COUNTIF(K:K,""Taux"")")
    nbData3 = Evaluate("COUNTIF(K:K,""Vitesse"")")
    [N:R].ClearContents ' nettoyer
    [N1] = "groupage": [P1] = "Débit": [Q1] = "Taux": [R1] = "Vitesse" ' titres
    [S1] = nbData: [S2] = nbData2: [S3] = nbData3
    [N2:O2].Resize(nbData) = [I2:J2].Resize(nbData).Value ' date-heure
    [P2].Resize(nbData) = [L2].Resize(nbData).Value ' Débit
    [Q2].Resize(nbData2) = [L2].Offset(nbData).Resize(nbData2).Value ' Taux
    [R2].Resize(nbData3) = [L2].Offset(nbData + nbData2).Resize(nbData3).Value ' Vitesse
    [O:O].NumberFormat = "hh:mm:ss"
End Sub

Celle ci a l'air de fonctionner

En fait, c'est encore mieux avec les tableaux croisés dynamiques...

Bonsoir,

la macro fonctionne sur le fichier que tu as donné.

88classeur1.zip (10.80 Ko)
Rechercher des sujets similaires à "macro deplacer fonction valeurs"