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

      C'est parfait. Merci beaucoup.
      Bonne journée.
      Flo.
  2. 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

    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é ...
      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ù
        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.
          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 !