Transformation de tableau Excel

Résolu/Fermé
Signaler
-
 Flo -
Bonjour,

Je refais la question pour que cela soit plus lisible.
Sous Excel, j'essaye de transformer de façon automatique le tableau 1 en tableau 2. Est-ce possible et de quelle manière? Merci d'avance. Bonne journée.

TABLEAU 1
NAME	1-Jan-09	2-Jan-09	3-Jan-09	4-Jan-09
name 1	  A	        A	         B	         B
name 2	  B	        A	         B	         B
name 3	  B	        B	         A	         A
name 4	  A	        A	         B	         B
name 5	  A	        A	         A	         B
name 6	  B	        B	         B 	         A
name 7	  B	        B	         A	         A
name 8	  B	        B	         B	         A
name 9	  A	        B	         B	         A
name 10	  A	        A	         B	         B




TABLEAU 2
NAMES	   A	           B
name 1	 1-Jan-09	
name 1	 2-Jan-09	
name 1		          3-Jan-09
name 1		          4-Jan-09
name 2	 2-Jan-09	
name 2		          1-Jan-09
name 2		          3-Jan-09
name 2		          4-Jan-09
etc.		
		
		
		
		
		
		
		
	

6 réponses

Messages postés
55096
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
5 décembre 2021
17 016
Salut.
Qui dit "manipulation" ou "transformation" dit par conséquent "VBA" et "macro".
Est-ce que tu t'y connais ?

Ceci dit, évite de lancer une nouvelle discussion sur la même question !
Salut Raymond,

OK pour la remarque.
Je ne connais pas assez "VBA" et les "macros" pour faire ce genre de manipulation.
Mais avec un coup de main, je pense pouvoir m'en sortir.

As tu une idée?
Merci d'avance.
Florian.
Messages postés
16538
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
1 décembre 2021
3 252
bonjour

Ca fait 2 fois que les orages coupent l'électricité! mais ca y est j'ai réussi à passer entre les éclairs

regarde si cette maquette te convient:
https://www.cjoint.com/?ggs25WlZ7n

le nombre de jour et le nombre de personnes ne sont pas limités
tu te places à l'endroit où tu veux commencer le tableau 2
puis outils-macro-macro -reorganiser

tu peux changer A et B en changeant les valeurs "constante" dans VBA (Alt+F11)

Const mot1 As String = "A"
Const mot2 As String = "B"
tu met tes données à la place de A ou B au cas où
Messages postés
55096
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
5 décembre 2021
17 016
"As tu une idée?" Non, hélas !

Sinon je t'aurais indiqué quelques pistes. Mais je te voulais te dire que sans macro, l'entreprise est risquée et hasardeuse, et les résultats non garantis ...

Ceci dit, quel que soit celui qui acceptera de t'aider, avec ou sans macro, ton exemple me paraît trop simpliste et risque de l'induire en erreur : En effet on en concluerait qu'il y a toujours à chaque ligne le même nombre de colonnes renseignées (tableau 1) donc de lignes groupées (tableau 2), et d'autre part seulement 2 variables (tableau 1) donc 2 colonnes (tableau 2), ce qui est probablement fort loin de la réalité ...
Messages postés
16538
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
1 décembre 2021
3 252
ci joint la macro commentée à des fins "didactiques"
(salut Mike31, excuses moi, je ne t'avais pas salué mais avec cette histoire de double-post et la menace de coupure de courant...)

Option Explicit
Const mot1 As String = "A" ' à adapter
Const mot2 As String = "B" 'a adapter

Sub reorganiser()
Dim der_col As Byte, der_lig As Long
Dim nbre As Long
Dim tablo
Dim qui As String, cptr As Long, lig As Long, col As Byte

With Sheets(1)
    'initialisation du tablo
    der_col = .Range("IV1").End(xlToLeft).Column
    der_lig = .Range("A65536").End(xlUp).Row
    nbre = (der_col - 1) * (der_lig - 1)
    ReDim tablo(nbre - 1, 3)
    
    'parcourt les lignes de la  liste des noms
    For lig = 2 To der_lig
    'nom colonne A sur la ligne en cours
    qui = .Cells(lig, 1)
        'parcourt les colonnes de la ligne en cours
        For col = 2 To der_col
            'insère le nom
            tablo(cptr, 0) = qui
            'insère la date
            tablo(cptr, 1) = .Cells(1, col)
            'teste le mot dans la cellule et le range suivant la valeur
            If .Cells(lig, col) = mot1 Then
                tablo(cptr, 2) = mot1
            Else
                tablo(cptr, 3) = mot2
            End If
            'incrémente le compteur du tablo
            cptr = cptr + 1
            Next
        Next
End With
'redimensionne la cellule de destination à la taille  en forme verticale du tablo
Selection.Resize(nbre, 4) = tablo
End Sub

Messages postés
16538
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
1 décembre 2021
3 252
bonjour

Ca fait 2 fois que les orages coupent l'électricité! mais ca y est j'ai réussi à passer entre les éclairs

regarde si cette maquette te convient:
https://www.cjoint.com/?ggs25WlZ7n

le nombre de jour et le nombre de personnes ne sont pas limités
tu te places à l'endroit où tu veux commencer le tableau 2
puis outils-macro-macro -reorganiser

tu peux changer A et B en changeant les valeurs "constante" dans VBA (Alt+F11)

Const mot1 As String = "A"
Const mot2 As String = "B"
tu met tes données à la place de A ou B au cas où
Bonjour Michel,

C'est parfait. Merci beaucoup.
Bonne journée.
Flo.