Microsoft 365 Transposition

Brigitte 45

XLDnaute Nouveau
Bonjour Tout Le Monde,
Afin d'effectuer quelques recherches, j'ai téléchargé mon historique d'opérations bancaires depuis 2017. Mais le hic c'est que tout est sur 1 seule colonne avec + de 1200 lignes (4 lignes pour 1 opération). Je souhaite transposer en tableau avec 5 colonnes et autant de lignes que d'opérations.
Je connais la fonction "Transpose" mais je suis obligée de le faire 4 lignes par 4 lignes sinon cela me fait l'inverse : 1200 colonnes pour 1 ligne.o_O:eek: Cela ne m'avance pas. J'ai mis un petit exemple en PJ.
Si l'un(e) d'entre vous a une solution, je lui vouerai une reconnaissance éternelle !:cool:
Merci par avance pour votre aide.
Amicalement,
Brigitte
 

Pièces jointes

  • Classeur1.xlsx
    16.2 KB · Affichages: 16

job75

XLDnaute Barbatruc
Bonjour Brigitte 45, JHA, Jacky67, chris,

Voyez le fichier joint et la macro affectée au bouton :
VB:
Sub Transposer()
Dim tablo, resu(), i&, n&
tablo = [A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
ReDim resu(1 To UBound(tablo), 1 To 5)
For i = 1 To UBound(tablo)
    If IsDate(tablo(i, 1)) Then
        n = n + 1
        resu(n, 1) = CDate(tablo(i, 1))
        resu(n, 2) = tablo(i + 1, 1)
        If IsNumeric(tablo(i + 2, 1)) Then
            resu(n, 4 - (tablo(i + 1, 2) > 0)) = tablo(i + 2, 1)
            i = i + 2
        Else
            resu(n, 3) = tablo(i + 2, 1)
            resu(n, 4 - (tablo(i + 3, 1) > 0)) = tablo(i + 3, 1)
            i = i + 3
        End If
    End If
Next
'---restitution---
With Feuil1 'CodeName de la feuille
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .[E6] '1ère cellule, à adapter
        If n Then
            .Resize(n, 5) = resu
            .Resize(n, 5).Borders.Weight = xlThin 'bordures
        End If
        .Offset(n).Resize(Rows.Count - n - .Row + 1, 5).Delete xlUp 'RAZ en dessous
    End With
End With
End Sub
A+
 

Pièces jointes

  • Transposition(1).xlsm
    24.1 KB · Affichages: 9

job75

XLDnaute Barbatruc
La macro de mon post #5 fonctionne qu'il y ait 1 ou 2 textes à chaque opération.

Mais s'il y en a toujours 2 c'est plus simple, fichier (2) :
VB:
Sub Transposer()
Dim tablo, resu(), i&, n&
tablo = [A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
ReDim resu(1 To UBound(tablo), 1 To 5)
For i = 1 To UBound(tablo)
    If IsDate(tablo(i, 1)) Then
        n = n + 1
        resu(n, 1) = CDate(tablo(i, 1))
        resu(n, 2) = tablo(i + 1, 1)
        resu(n, 3) = tablo(i + 2, 1)
        resu(n, 4 - (tablo(i + 3, 1) > 0)) = CDbl(tablo(i + 3, 1))
        i = i + 3
    End If
Next
'---restitution---
With Feuil1 'CodeName de la feuille
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .[E6] '1ère cellule, à adapter
        If n Then
            .Resize(n, 5) = resu
            .Resize(n, 5).Borders.Weight = xlThin 'bordures
        End If
        .Offset(n).Resize(Rows.Count - n - .Row + 1, 5).Delete xlUp 'RAZ en dessous
    End With
End With
End Sub
A+
 

Pièces jointes

  • Transposition(2).xlsm
    24 KB · Affichages: 7

Brigitte 45

XLDnaute Nouveau
La macro de mon post #5 fonctionne qu'il y ait 1 ou 2 textes à chaque opération.

Mais s'il y en a toujours 2 c'est plus simple, fichier (2) :
VB:
Sub Transposer()
Dim tablo, resu(), i&, n&
tablo = [A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
ReDim resu(1 To UBound(tablo), 1 To 5)
For i = 1 To UBound(tablo)
    If IsDate(tablo(i, 1)) Then
        n = n + 1
        resu(n, 1) = CDate(tablo(i, 1))
        resu(n, 2) = tablo(i + 1, 1)
        resu(n, 3) = tablo(i + 2, 1)
        resu(n, 4 - (tablo(i + 3, 1) > 0)) = CDbl(tablo(i + 3, 1))
        i = i + 3
    End If
Next
'---restitution---
With Feuil1 'CodeName de la feuille
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .[E6] '1ère cellule, à adapter
        If n Then
            .Resize(n, 5) = resu
            .Resize(n, 5).Borders.Weight = xlThin 'bordures
        End If
        .Offset(n).Resize(Rows.Count - n - .Row + 1, 5).Delete xlUp 'RAZ en dessous
    End With
End With
End Sub
A+
Ouiiiii ça fonctionne. Merciiiiiiiiiiiii à l'infini !:):):)
 

Brigitte 45

XLDnaute Nouveau
Bonjour Brigitte 45, JHA, Jacky67, chris,

Voyez le fichier joint et la macro affectée au bouton :
VB:
Sub Transposer()
Dim tablo, resu(), i&, n&
tablo = [A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
ReDim resu(1 To UBound(tablo), 1 To 5)
For i = 1 To UBound(tablo)
    If IsDate(tablo(i, 1)) Then
        n = n + 1
        resu(n, 1) = CDate(tablo(i, 1))
        resu(n, 2) = tablo(i + 1, 1)
        If IsNumeric(tablo(i + 2, 1)) Then
            resu(n, 4 - (tablo(i + 1, 2) > 0)) = tablo(i + 2, 1)
            i = i + 2
        Else
            resu(n, 3) = tablo(i + 2, 1)
            resu(n, 4 - (tablo(i + 3, 1) > 0)) = tablo(i + 3, 1)
            i = i + 3
        End If
    End If
Next
'---restitution---
With Feuil1 'CodeName de la feuille
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .[E6] '1ère cellule, à adapter
        If n Then
            .Resize(n, 5) = resu
            .Resize(n, 5).Borders.Weight = xlThin 'bordures
        End If
        .Offset(n).Resize(Rows.Count - n - .Row + 1, 5).Delete xlUp 'RAZ en dessous
    End With
End With
End Sub
A+
Je n'y connais rien en macro. Une fois que j'ai copié dans le presse papier, je fais quoi ? Merci par avance.
 

Amilo

XLDnaute Accro
Oui, il y a bien 4 lignes, c'est un oubli dans le fichier. Je l'ai corrigé, le voici en PJ.
Bonjour Brigitte 45, JHA, Jacky67, Chris, Job75, le forum,
Egalement une proposition avec Power query avec une autre méthode que celle à Chris,

Video_Transposition

P.S La vidéo sera supprimée automatiquement après 7 jours

Cordialement
 

Pièces jointes

  • Transposition.xlsx
    19.7 KB · Affichages: 8
Dernière édition:

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87