Transformation de tableau Excel

Résolu
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

  1. Contributeur
    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 !
    0
    1. 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.
      0
      1. Contributeur
        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ù
        0
        1. Contributeur
          "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é ...
          0
          1. Contributeur
            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

            0
            1. Contributeur
              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ù
              0
              1. Bonjour Michel,

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