Mise en forme d'un tableau

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
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
 
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
...
 
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é 😳
 
Dernière édition:
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 😉.
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
137
Retour