macro pour changer les colonnes en lignes

tapha20

XLDnaute Occasionnel
Bonjour à tous

je reviens vers vous pour solliciter de l'aide concernant une macro un peu complexe, pour simplifier, je cherche à change les colonne en ligne.

Vous trouverez le doc en joint en fueil1 les données brutes, et en feuil2 la façon dont elles devrait être organiser (je cherche donc une macro qui me pret de fait automatiquement la chose c-a-d les données en 1 se transforment en 2).

Quelqu'un m'avais suggérer cette macro il y a deux mois, mais je viens de me rendre compte qu'elle ne fonctionne pas. car elle prend un compte une seule ligne.

exemple: sur pour un même numéro de dosier il y a3 date (PRimo appel, MES et R2) la macro prend juste le réssultat Primo appel et ne prends pas les autre.

je cherche une macro qui me donnera tous les résultats en détail c-a-d qu'une affaire peut apparaitre plus d'une fois car on peut faire une Primo appel une MES , explication devis, et R2 sur une meme affaire.

Dim numLigne As Integer
numLigne = 2
For i = 2 To Sheets("Tri.appels").Range("A1").End(xlDown).Row
For j = 2 To Sheets(Feuil1.Name).Range("IV" & i).End(xlToLeft).Column
If Sheets("Tri.appels").Range("A" & i).Offset(0, j).Value <> "" Then
Sheets("Modif.appels").Range("A" & numLigne).Value = Sheets("Tri.appels").Range("A" & i).Value
Sheets("Modif.appels").Range("B" & numLigne).Value = Sheets("Tri.appels").Range("B" & i).Value
Sheets("Modif.appels").Range("C" & numLigne).Value = Sheets("Tri.appels").Range("A1").Offset(0, j).Value
Sheets("Modif.appels").Range("D" & numLigne).Value = Sheets("Tri.appels").Range("A" & i).Offset(0, j).Value
numLigne = numLigne + 1
Exit For
End If
Next
Next
End Sub


J'attend vos réponse, je suis vraiment à la bour étant donné que je viens de découvir cette erreur à la fin de mission.

Je vous remcercie pour toute vos réponse.

cordialement
 

Pièces jointes

  • Apppels.xls
    28 KB · Affichages: 65

Gurgeh

XLDnaute Occasionnel
Re : macro pour changer les colonnes en lignes

Salut tapha20,

Je te propose le code suivant, que j'ai commenté pour que tu puisses comprendre ce qui s'y passe :

Code:
Sub Transform()
    'On va utiliser deux noms pour désigner les feuilles de départ (FeuilleSource) et d'arrivée (FeuilleCible)
    Dim FeuilleSource, FeuilleCible As Worksheet
    
    'On détermine quelles feuilles du classeur vont servir de source et de cible
    Set FeuilleSource = ThisWorkbook.Sheets("Base")
    Set FeuilleCible = ThisWorkbook.Sheets("Résultat")
    
    'Les variables LigneFeuillexxx vont servir à savoir quelle est la ligne que l'on traite dans chacune des feuilles
    LigneFeuilleSource = 2
    LigneFeuilleCible = 2
    
    'On va faire une boucle jusqu'à ce qu'on rencontre une cellule vide en première colonne de la feuille source
    While FeuilleSource.Cells(LigneFeuilleSource, 1).Value <> ""
        'Pour chaque ligne de la feuille source, on va regarder les colonnes de 3 à 6
        For ColonneFeuilleSource = 3 To 6
            'Sur la ligne en cours de la feuille source, on va regarder s'il y a une valeur dans la colonne que l'on est en train de traiter
            If FeuilleSource.Cells(LigneFeuilleSource, ColonneFeuilleSource).Value <> "" Then
            's'il y en a une, on remplit la ligne en cours de la feuille cible avec les informations nécessaires
                FeuilleCible.Cells(LigneFeuilleCible, 1).Value = FeuilleSource.Cells(LigneFeuilleSource, 1).Value
                FeuilleCible.Cells(LigneFeuilleCible, 2).Value = FeuilleSource.Cells(LigneFeuilleSource, 2).Value
                FeuilleCible.Cells(LigneFeuilleCible, 3).Value = FeuilleSource.Cells(1, ColonneFeuilleSource).Value
                FeuilleCible.Cells(LigneFeuilleCible, 4).Value = FeuilleSource.Cells(LigneFeuilleSource, ColonneFeuilleSource).Value
             'puis on passe à la ligne suivante de la feuille cible
                LigneFeuilleCible = LigneFeuilleCible + 1
            End If
        'et on attaque la colonne suivante
        Next ColonneFeuilleSource
        'une fois la ligne en cours de la feuille source traitée, on passe à la suivante
        LigneFeuilleSource = LigneFeuilleSource + 1
    Wend
End Sub

A ta disposition si tu as plus de questions...

Pense à mettre les bons noms de feuilles au début de la macro

Gurgeh
 

Discussions similaires

Réponses
11
Affichages
298

Statistiques des forums

Discussions
312 323
Messages
2 087 301
Membres
103 512
dernier inscrit
sisi235