Déplacer de nombreuses lignes selon le contenu d'une colonne

bonjour,

j'ai un fichier avec des heures et en face des relevées de température et d'hygrométrie. En colonne F figure le nom du thermomètre concerné. Jusqu'alors, les relevées de tous les thermomètres sont enregistrées ligne par ligne, les un sous les autres, ce qui représente 2208 lignes,

J'aimerais que les données soient disposées à coté les unes des autres, comme sur l'exemple ci-joint. Je me suis essayé à un bout de macro qui fonctionne pour déplacer les valeurs du 2ème thermomètre à côté des valeurs du 1er thermo, mais je ne parviens pas à boucler cet automatisme pour qu'il s'applique aux autres valeurs.

Auriez-vous une idée?

6compile.xlsm (94.24 Ko)

Hello,

Une proposition PowerQuery, pas besoin de vba et ça fait le job mais peut être que je suis parti loin.

Ca fonctionne en tout cas

@+

3compile.xlsm (172.07 Ko)

bonjour Baroute78, ruliann,

avec une macro

Sub Déplacer()
     Dim c, sNom, i1, iNombre
     With Sheets("compile")
          Set c = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row)     'la colonne A à partir de A2
          i1 = 1                             'pointer vers la 1ière cellule de notre plage
          ptr = 0                            'compteur des blocs = 0
          Do
               sNom = c.Cells(i1, "F")       'nom du thermomètre
               iNombre = WorksheetFunction.CountIf(c.Offset(, 5), sNom)     'nombre de lignes avec ce thermomètre en colonne F
               If ptr > 0 Then               '1ier bloc reste sur place, les suivant déplacer
                    Set c1 = .Cells(1, 1 + ptr * 6)     'plage de l'entête de ce bloc "destination"
                    .Range("A1:F1").Copy c1  'copier et coller l'entête
                    c.Cells(i1).Resize(iNombre, 6).Cut c1.Offset(1)     'la cellule i1 de notre plage + iNombre de lignes et 6 colonnes
               End If

               ptr = ptr + 1                 'compteur des blocs
               i1 = i1 + iNombre             '1ière cellule du bloc suivant

          Loop While c.Cells(i1, 1).Value <> ""  
          .Rows(1).EntireColumn.AutoFit
     End With
End Sub

PS. il faut bloquer la macro "worksheet_change" de la feuille.

@baroute78 : très bonne idée, mais je ne connais pas assez cet Ad In et au boulot l'IT ne veut pas l'installer... (on est encore sous office 2013)
@BsAlv : impeccable! faut que je comprenne ta macro maintenant :)

re,

on a la colonne A de A2 à A.... et 5 colonnes à droite les noms

1. on prend le premier nom, i1=1,bloc 0

2. on compte le nombre de ce noms dans la plage F2:F... = iNombre

3. la plage à déplacer est donc dans la plage A2:A..., à partir de la i1-ième cellule de la colonne A pour iNombre de lignes et 6 colonnes

4. la destination a) pour l'entête = première ligne et colonne 1+ 6*le numéro du bloc et b) pour le bloc, la ligne juste en dessous

5. on augmente i1 avec iNombre et le numéro du bloc avec 1 et on recommence jusqu'au moment où la cellule est vide.

Rechercher des sujets similaires à "deplacer nombreuses lignes contenu colonne"