Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

transformation d'une ligne en plusieurs lignes "par tranche de 5"

  • Initiateur de la discussion Initiateur de la discussion avg2119
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

avg2119

XLDnaute Nouveau
Bonsoir à tous,

j'ai un tableau source qui, pour une même ligne, contient:
- tout d'abord des informations générales sur l'étude (1 ligne = 1 étude)
- puis des centres participant à l'étude (en nombre variable selon l'étude), avec à chaque 4 fois 4 colonnes de paramètres liés à ce centre.
Ainsi, toutes les 5 colonnes, un nom de nouveau centre apparaît, puis est suivi par les 4 paramètres du centre dans les 4 colonnes suivantes

Je souhaiterais pouvoir transformer mon tableau de la façon suivante:
- pour une étude, on créée autant de lignes qu'il y a de centres associés
- les premières colonnes d'information générale sont répétées systématiquement autant de fois qu'il y a de centres
- puis 1 ligne = 1 centre en mettant à la suite les informations associées

J'ai joint un fichier qui sera certainement plus clair

J'étais parti sur des formules avec l'utilisation de la fonction DECALER en essayant de jouer sur des multiples de 5 et quotient/reste de division, mais sans succès.

Merci d'avance pour le coup de main

Arnaud
 

Pièces jointes

Re : transformation d'une ligne en plusieurs lignes "par tranche de 5"

Bonsoir avg2119.


Un essai par une procédure VB.​
VB:
Sub toto()
Dim i&, j&, k&, l&, m&, u1&, u2&, d(), w()
  d = Feuil1.[A4].CurrentRegion.Value
  u1 = UBound(d, 1)
  u2 = UBound(d, 2)
  For i = 2 To u1: For j = 5 To u2 Step 5
    If Not IsEmpty(d(i, j)) Then k = k + 1
  Next j, i
  k = u1 + k + 1
  ReDim w(1 To k, 1 To 9)
  For i = 1 To 9: w(1, i) = d(1, i): Next
  l = 1
  For i = 2 To u1
    For j = 5 To u2 Step 5
      If Not IsEmpty(d(i, j)) Then
        l = l + 1
        For m = 1 To 4: w(l, m) = d(i, m): Next
        For m = j To j + 4: w(l, m - j + 5) = d(i, m): Next
      End If
    Next
    l = l + 1: w(l, 1) = " "
  Next
  With Feuil2.[A1]
    .CurrentRegion.ClearContents
    .Resize(k, 9).Value = w
    .Parent.Activate
  End With
End Sub


ℝOGER2327
#7240


Mercredi 18 Clinamen 141 (Les 27 Êtres Issus des Livres Pairs - Vacuation)
20 Germinal An CCXXII, 7,2149h - ruche
2014-W15-3T17:18:57Z
 

Pièces jointes

Re : transformation d'une ligne en plusieurs lignes "par tranche de 5"

Merci Roger2327
Super code, ça marche niquel. Je viens de gagner un max de temps
Dans le cas où les dimensions de mon tableau, j'ai un peu adapté le code (cf plus bas). Ca semble marcher, je pense ne pas m'être trompé dans les indices
Merci encore, super coup de pouce
PS: comment insères-tu proprement ton code VB dans la page?

Arnaud

--

Option Explicit

Sub toto()
Dim i&, j&, k&, l&, m&, u1&, u2&, d(), w()
Dim ne As Integer
Dim nc As Integer

'nombre de colonnes pour les études et pour les centres
ne = 9
nc = 3

d = Feuil1.[A4].CurrentRegion.Value
u1 = UBound(d, 1)
u2 = UBound(d, 2)
For i = 2 To u1: For j = ne + 1 To u2 Step nc
If Not IsEmpty(d(i, j)) Then k = k + 1
Next j, i
k = u1 + k + 1
ReDim w(1 To k, 1 To ne + nc)
For i = 1 To ne + nc: w(1, i) = d(1, i): Next
l = 1
For i = 2 To u1
For j = ne + 1 To u2 Step nc
If Not IsEmpty(d(i, j)) Then
l = l + 1
For m = 1 To ne: w(l, m) = d(i, m): Next
For m = j To j + nc - 1: w(l, m - j + ne + 1) = d(i, m): Next
End If
Next

Next
With Feuil2.[A1]
.CurrentRegion.ClearContents
.Resize(k, ne + nc).Value = w
.Parent.Activate
End With
End Sub
 
Re : transformation d'une ligne en plusieurs lignes "par tranche de 5"

Hello again,

petit souci sur certaines dimensions de tableau différentes



Sur la ligne en jaune, VBA m'indique "erreur d'execution, l'indice n'apparait pas dans la sélection"
Pourtant le code adapté avec les paramètres de nombre de colonnes semblait marcher
Vois-tu une erreur dans la notation des indices?

Merci par avance

Arnaud
 

Pièces jointes

  • Capture.jpg
    39.8 KB · Affichages: 39
  • Capture.jpg
    39.8 KB · Affichages: 41
Re : transformation d'une ligne en plusieurs lignes "par tranche de 5"

Re...




Pas d'erreur de paramétrage.
S'il y a un problème sur la ligne que vous signalez, c'est que la structure du tableau de données n'est pas celle que vous avez montrée dans votre classeur du message #1. Le code est conçu pour fonctionner avec un tableau comportant exactement ne + λ.nc colonnes où λ est un nombre entier strictement positif.
Sans voir la structure réelle de votre tableau de données, difficile d'en dire plus. Cependant, essayez ceci pour voir ce qui se passe :​
VB:
Sub toto()
Dim i&, j&, k&, l&, m&, u1&, u2&, d(), w()
Const ne% = 9, nc% = 3
  d = Feuil1.[A4].CurrentRegion.Value
  u1 = UBound(d, 1)
  u2 = UBound(d, 2)
  u2 = u2 - (nc - (u2 - ne) Mod nc) * ((u2 - ne) Mod nc <> 0)
  ReDim Preserve d(1 To u1, 1 To u2)
  For i = 2 To u1: For j = ne + 1 To u2 Step nc
    If Not IsEmpty(d(i, j)) Then k = k + 1
  Next j, i
  k = u1 + k + 1
  ReDim w(1 To k, 1 To ne + nc)
  For i = 1 To ne + nc: w(1, i) = d(1, i): Next
  l = 1
  For i = 2 To u1
    For j = ne + 1 To u2 Step nc
      If Not IsEmpty(d(i, j)) Then
        l = l + 1
        For m = 1 To ne: w(l, m) = d(i, m): Next
        For m = j To j + nc - 1: w(l, m - j + ne + 1) = d(i, m): Next
      End If
    Next
  Next
  With Feuil2.[A1]
    .CurrentRegion.ClearContents
    .Resize(k, ne + nc).Value = w
    .Parent.Activate
  End With
End Sub
Si ce n'est pas correct, donnez un exemple de tableau récalcitrant...​


Bon courage.


ℝOGER2327
#7246


Jeudi 19 Clinamen 141 (Saint Barbeau, procureur et Sainte Morue, juste - fête Suprême Quarte)
21 Germinal An CCXXII, 9,3543h - gainier
2014-W15-4T22:27:01Z
 
Dernière édition:
Re : transformation d'une ligne en plusieurs lignes "par tranche de 5"

Merci Roger2327 ça semble marcher parfaitement. Plus de message d'erreur en changeant les paramètres de taille du tableau.
Chapeau pour la formule de définition de u2 avec les modulo...

Et merci Staple1600 pour le tip
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
585
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…