Classer en colonnes

Le
Sylvain P.
Bonjour à tous,

J'ai un fichier excel avec des valeurs dispoé de la façon suivante :
2 3 4
3
1 2 4
1 4

J'aimerai classer ces valeurs ainsi (la première valeur remplie dans
la première colonne, la deuxième dans la deuxième colonne etc.) :
2 3 4
2
1 2 4
1 4


Voici mon code :

Sub test()

For Each c In Range("A2:D20")
If c.Value <> 0 Then
If Range("f" & c.Row).Value = 0 Then Range("f" & c.Row).Value
= c.Value
Else: Range("g" & c.Row).Value = c.Value
End If
Next

End Sub

Je teste si la cellule est vide. Mais je pressens que je m'enferme
dans une logique trop compliquée.
Des idées ?

Merci par avance.

A+
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Tatanka
Le #6433301
Salut Sylvain,

Pas sûr de comprendre, mais essaie quand même cette macro :
Sub En_Colonnes()
Set ici = [e2]
For Each c In [a1:d20]
If c <> "" Then
i = i + 1
ici.Offset(0, i) = c
End If
Next c
End Sub

Serge

"Sylvain P."
Bonjour à tous,

J'ai un fichier excel avec des valeurs dispoé de la façon suivante :
2 3 4
3
1 2 4
1 4

J'aimerai classer ces valeurs ainsi (la première valeur remplie dans
la première colonne, la deuxième dans la deuxième colonne etc.) :
2 3 4
2
1 2 4
1 4


Voici mon code :

Sub test()

For Each c In Range("A2:D20")
If c.Value <> 0 Then
If Range("f" & c.Row).Value = 0 Then Range("f" & c.Row).Value
= c.Value
Else: Range("g" & c.Row).Value = c.Value
End If
Next

End Sub

Je teste si la cellule est vide. Mais je pressens que je m'enferme
dans une logique trop compliquée.
Des idées ?

Merci par avance.

A+
Tatanka
Le #6433291
Pour me permettre de mieux comprendre.
Si on s'intéresse à la plage A2:C5
et que ces valeurs y apparaissent :

A B C
1
2 1
3 2 3 4
4 5
5 6 7

Où veux-tu retrouver ces sept valeurs ?

Serge


"Sylvain P."
Bonjour à tous,

J'ai un fichier excel avec des valeurs dispoé de la façon suivante :
2 3 4
3
1 2 4
1 4

J'aimerai classer ces valeurs ainsi (la première valeur remplie dans
la première colonne, la deuxième dans la deuxième colonne etc.) :
2 3 4
2
1 2 4
1 4


Voici mon code :

Sub test()

For Each c In Range("A2:D20")
If c.Value <> 0 Then
If Range("f" & c.Row).Value = 0 Then Range("f" & c.Row).Value
= c.Value
Else: Range("g" & c.Row).Value = c.Value
End If
Next

End Sub

Je teste si la cellule est vide. Mais je pressens que je m'enferme
dans une logique trop compliquée.
Des idées ?

Merci par avance.

A+
frederic.micheau
Le #6435191
Bonjour Serge,

Merci pour ce premier code. Ce n'est pas exactement ça. Je vais
préciser parce que je n'ai pas été suffisamment clair.
Pour reprendre ton exemple, si on s'intéresse à la plage A2:C5 et que
ces valeurs y apparaissent :

A B C
1
2 1
3 2 3 4
4 5
5 6 7


J'aimerai retrouver en colonne E, F et G les valeurs suivantes :
A B C D E F G
1
2 1 1
3 2 3 4 2 3 4
4 5 5
5 6 7 6 7

Merci par avance !
A+
Sylvain P.
Le #6436561
Bonjour Serge,

Merci pour ce premier code. Ce n'est pas exactement ça. Je vais
préciser parce que je n'ai pas été suffisamment clair.

Pour reprendre ton exemple, si on s'intéresse à la plage A2:C5 et que
ces valeurs y apparaissent :
A B C
1
2 1
3 2 3 4
4 5
5 6 7
J'aimerai retrouver en colonne E, F et G les valeurs suivantes :
A B C D E F G
1
2 1 1
3 2 3 4 2 3 4
4 5 5
5 6 7 6 7

Merci par avance !
A+
Tatanka
Le #6438161
Salut Sylvain,

Voici une macro qui semble faire le boulot demandé
à partir d'une sélection quelconque de cellules adjacentes.
Est-ce bien le cas ?

Sub Nouveau_Tableau()
Dim v()
Set ici = Selection
NL = ici.Rows.Count
NC = ici.Columns.Count
Set la = ici.Offset(0, NC + 1)
ReDim v(1 To NC)
For i = 1 To NL
For j = 1 To NC
If ici(i, j) <> "" Then
k = k + 1
v(k) = ici(i, j)
End If
Next j
For n = 1 To k
la(i, n) = v(n)
Next n
k = 0
Next i
la.Select
End Sub

Serge




"Sylvain P."
Bonjour Serge,

Merci pour ce premier code. Ce n'est pas exactement ça. Je vais
préciser parce que je n'ai pas été suffisamment clair.

Pour reprendre ton exemple, si on s'intéresse à la plage A2:C5 et que
ces valeurs y apparaissent :
A B C
1
2 1
3 2 3 4
4 5
5 6 7
J'aimerai retrouver en colonne E, F et G les valeurs suivantes :
A B C D E F G
1
2 1 1
3 2 3 4 2 3 4
4 5 5
5 6 7 6 7

Merci par avance !
A+
Tatanka
Le #6438391
Petite restriction :
Avant d'utiliser cette macro, il faut t'assurer que le nouveau
tableau : Set la = ici.Offset(0, NC + 1)
ne contient aucune valeur avant de le remplir.

Serge


"Tatanka"
Salut Sylvain,

Voici une macro qui semble faire le boulot demandé
à partir d'une sélection quelconque de cellules adjacentes.
Est-ce bien le cas ?

Sub Nouveau_Tableau()
Dim v()
Set ici = Selection
NL = ici.Rows.Count
NC = ici.Columns.Count
Set la = ici.Offset(0, NC + 1)
ReDim v(1 To NC)
For i = 1 To NL
For j = 1 To NC
If ici(i, j) <> "" Then
k = k + 1
v(k) = ici(i, j)
End If
Next j
For n = 1 To k
la(i, n) = v(n)
Next n
k = 0
Next i
la.Select
End Sub

Serge




"Sylvain P."
Bonjour Serge,

Merci pour ce premier code. Ce n'est pas exactement ça. Je vais
préciser parce que je n'ai pas été suffisamment clair.

Pour reprendre ton exemple, si on s'intéresse à la plage A2:C5 et que
ces valeurs y apparaissent :
A B C
1
2 1
3 2 3 4
4 5
5 6 7
J'aimerai retrouver en colonne E, F et G les valeurs suivantes :
A B C D E F G
1
2 1 1
3 2 3 4 2 3 4
4 5 5
5 6 7 6 7

Merci par avance !
A+



Tatanka
Le #6439321
En enlevant une boucle et en dimensionnant les variables,
on obtient cette macro :

Sub Nouveau_Tableau()
Dim NL&, NC%, i&, j%, k%
Dim v()
Dim ici As Range, la As Range
Set ici = Selection
NL = ici.Rows.Count
NC = ici.Columns.Count
Set la = ici.Offset(0, NC + 1)
ReDim v(1 To NC)
For i = 1 To NL
For j = 1 To NC
If ici(i, j) <> "" Then
k = k + 1
la(i, k) = ici(i, j)
End If
Next j
k = 0
Next i
la.Select
End Sub

Serge


"Tatanka"
Petite restriction :
Avant d'utiliser cette macro, il faut t'assurer que le nouveau
tableau : Set la = ici.Offset(0, NC + 1)
ne contient aucune valeur avant de le remplir.

Serge


"Tatanka"
Salut Sylvain,

Voici une macro qui semble faire le boulot demandé
à partir d'une sélection quelconque de cellules adjacentes.
Est-ce bien le cas ?

Sub Nouveau_Tableau()
Dim v()
Set ici = Selection
NL = ici.Rows.Count
NC = ici.Columns.Count
Set la = ici.Offset(0, NC + 1)
ReDim v(1 To NC)
For i = 1 To NL
For j = 1 To NC
If ici(i, j) <> "" Then
k = k + 1
v(k) = ici(i, j)
End If
Next j
For n = 1 To k
la(i, n) = v(n)
Next n
k = 0
Next i
la.Select
End Sub

Serge




"Sylvain P."
Bonjour Serge,

Merci pour ce premier code. Ce n'est pas exactement ça. Je vais
préciser parce que je n'ai pas été suffisamment clair.

Pour reprendre ton exemple, si on s'intéresse à la plage A2:C5 et que
ces valeurs y apparaissent :
A B C
1
2 1
3 2 3 4
4 5
5 6 7
J'aimerai retrouver en colonne E, F et G les valeurs suivantes :
A B C D E F G
1
2 1 1
3 2 3 4 2 3 4
4 5 5
5 6 7 6 7

Merci par avance !
A+







Publicité
Poster une réponse
Anonyme