Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Classer en colonnes

7 réponses
Avatar
Sylvain P.
Bonjour =E0 tous,

J'ai un fichier excel avec des valeurs dispo=E9 de la fa=E7on suivante :
2 3 4
3
1 2 4
1 4

J'aimerai classer ces valeurs ainsi (la premi=E8re valeur remplie dans
la premi=E8re colonne, la deuxi=E8me dans la deuxi=E8me 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 =3D 0 Then Range("f" & c.Row).Value
=3D c.Value
Else: Range("g" & c.Row).Value =3D 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=E9e.
Des id=E9es ?

Merci par avance.

A+

7 réponses

Avatar
Tatanka
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." a écrit dans le message de news:

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+
Avatar
Tatanka
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." a écrit dans le message de news:

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+
Avatar
frederic.micheau
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+
Avatar
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+
Avatar
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." a écrit dans le message de news:

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+
Avatar
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" a écrit dans le message de news: uO$
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." a écrit dans le message de news:

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+



Avatar
Tatanka
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" a écrit dans le message de news:
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" a écrit dans le message de news: uO$
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." a écrit dans le message de news:

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+