Mise en forme d'un tableau

pierrof

XLDnaute Occasionnel
Bonjour tout le monde

Voilà j'ai un tableau Excel avec des données renseignées aléatoirement. Je voudrais mettre de l'ordre dans le tableau en mettant toutes les valeurs dans la première colonne du tableau (sans créer un nouveau tableau).

Je joint un fichier exemple.

Merci de votre aide

Cordialement
 

Pièces jointes

  • Test.xls
    25.5 KB · Affichages: 51

thebenoit59

XLDnaute Accro
Bonjour Pierrof.
Selon ton exemple :
VB:
Sub organisation()
Dim t1(), t2()
Dim i As Byte, j As Byte
t1 = Sheets(1).[D4:F11].Value
ReDim t2(1 To UBound(t1), 1 To UBound(t1, 1))
For i = LBound(t1) To UBound(t1)
    For j = LBound(t1, 2) To UBound(t1, 2)
        If t1(i, j) <> "" Then
            t2(i, 1) = t1(i, j)
            Exit For
        End If
    Next j
Next i
Sheets(1).[D14:F21].Value = t2
End Sub
 

pierrof

XLDnaute Occasionnel
Bonjour thebenoit59

Merci de ta réponse. Cela fonctionne bien mais si j’augmente la taille de mon tableau a plus de 1000 lignes j'ai un bug au niveau de la ligne:
For i = LBound(t1) To UBound(t1)

Est-ce normal?

Dim t1(), t2()
Dim i As Byte, j As Byte
t1 = Sheets(1).[D4:F1400].Value
ReDim t2(1 To UBound(t1), 1 To UBound(t1, 1))
For i = LBound(t1) To UBound(t1)
For j = LBound(t1, 2) To UBound(t1, 2)
If t1(i, j) <> "" Then
t2(i, 1) = t1(i, j)
Exit For
End If
Next j
Next i
Sheets(1).[D4:F1400].Value = t2
 

pierrof

XLDnaute Occasionnel
J'ai essayé, mais ça bloque toujours:

Private Sub CommandButton1_Click()
Dim t1 As Integer, t2 As Integer
Dim i As Byte, j As Byte
t1 = Sheets(1).[D4:F999].Value
ReDim t2(1 To UBound(t1), 1 To UBound(t1, 1))
For i = LBound(t1) To UBound(t1)
For j = LBound(t1, 2) To UBound(t1, 2)
If t1(i, j) <> "" Then
t2(i, 1) = t1(i, j)
Exit For
End If
Next j
Next i
Sheets(1).[D4:F999].Value = t2
End Sub
 

thebenoit59

XLDnaute Accro
Bonjour Pierrof.
Selon ton exemple :
VB:
Sub organisation()
Dim t1(), t2()
Dim i As Byte, j As Byte
t1 = Sheets(1).[D4:F11].Value
ReDim t2(1 To UBound(t1), 1 To UBound(t1, 1))
For i = LBound(t1) To UBound(t1)
    For j = LBound(t1, 2) To UBound(t1, 2)
        If t1(i, j) <> "" Then
            t2(i, 1) = t1(i, j)
            Exit For
        End If
    Next j
Next i
Sheets(1).[D14:F21].Value = t2
End Sub

VB:
Dim t1(), t2()
Dim i As Byte, j As Byte
Donne
VB:
Dim t1(), t2()
Dim i As Integer, j As Byte
...
 

zebanx

XLDnaute Accro
Bonjour Benoit59, pierrof

@Benoit59
C'est la spéciale tablo() cette semaine --))
J'utilise une fonction pour concatener les informations habituellement mais avec une seule occurrence, ton code est bien pratique pour rassembler sur une colonne ou une ligne (à adapter en conséquence bien sur).
Merci (et j'attends la suite des codes sur d'autres sujets ;)).
++
zebanx

edit : corrigé :oops:
 
Dernière édition:

thebenoit59

XLDnaute Accro
Salut Zebanx.
Quand je peux utiliser les tableaux virtuels je le fais, c'est quand même plus intéressant.
De plus il ne souhaite pas créer de nouveaux tableaux alors une fonction n'est pas utilisable.
Sinon pour t'embêter c'est Benoit et pas Benoît donc le S n'est pas utile ;).
 

zebanx

XLDnaute Accro
Re- Benoit
Bien noté.

Il faut un peu d'expérience avant de s'y coller mais sur des codes courts et bien présentés comme celui-là, c'est intéressant (utilisation de plusieurs boucles, Lbound() et Ubound), c'est vraiment agréable.
Le seul sujet avec les tableaux virtuels c'est qu'on ne voit pas la traduction de l'exécution de la macro avant la dernière ligne en pas à pas détaillé.
Et qu'on préfère souvent passer par des longs "select"... pour prendre de l'assurance pendant un moment (plus ou moins long).
A suivre, bonne fin d'apm.
 

Discussions similaires

Réponses
8
Affichages
362

Statistiques des forums

Discussions
314 141
Messages
2 106 292
Membres
109 554
dernier inscrit
jey