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

VBA - transformer des colonnes en lignes

  • Initiateur de la discussion Initiateur de la discussion jcf
  • 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 !

J

jcf

Guest
bonjour tout le monde,

J'ai besoin de vos conseils pour une macro (je débute).
J'ai un fichier Excel avec plusieurs colonnes :



J'aimerai créer une nouvelle ligne pour chaque tranches de SDA (SDA_debut -> SDA_fin) en gardant les infos "code_site", "caisse", "NDI_ref_facturation".

Pour avoir le résultat ci-dessous :



Vous avez des conseils ? une idée du déroulement du script ? des fonctions qui pourraient m'aider ?

Merci d'avance ! 🙂
 
Re : VBA - transformer des colonnes en lignes

Bonjour Jcf et bienvenue sur ce forum

Il te faut déjà une boucle pour effectuer l'action sur toutes les lignes
Voci un début de code 😉
Code:
Sub Test()
Dim DLig as long, Lig as long
' Récupérer la dernière ligne remplie du tableau
DLig = Range("A" & Rows.Count).End(XlUp).Row
' Pour chaque ligne en partant de la fin, mieux pour insérer des lignes
For Lig = DLig to 2 Step -1
  ' Vérifier si sur la ligne il y a d'autres SDA
  ' Si oui insérer une ligne et couper coller les données
Next Lig
End Sub

A+
 
Re : VBA - transformer des colonnes en lignes

Bonjour jcf, bienvenue sur XLD,

Un conseil : joignez le fichier, ça évitera de se fatiguer à le refabriquer.

Quant au script : du couper/coller, en insérant les lignes nécessaires...

Edit : salut Bruno 🙂

A+
 
Re : VBA - transformer des colonnes en lignes

Bonjour, merci pour votre accueil et vos réponses.

Bruno j'ai une question.
Sur la boucle For, pourquoi le "to 2" ?

Code:
For Lig = DLig to 2 Step -1

Edit : ok je viens de comprendre, je plaisantais pas quand je disais que je débutais xD
 

Pièces jointes

Dernière modification par un modérateur:
Re : VBA - transformer des colonnes en lignes

Re,

La macro et le fichier :

Code:
Sub Regrouper()
Dim lig&, lig1&, col%
Application.ScreenUpdating = False
For lig = [A65536].End(xlUp).Row To 2 Step -1
  lig1 = lig + 1
  col = 6
  While Cells(lig, col) <> ""
    Rows(lig1).Insert
    Cells(lig, col).Resize(, 2).Cut Cells(lig1, 4)
    Cells(lig, 1).Resize(, 3).Copy Cells(lig1, 1)
    lig1 = lig1 + 1
    col = col + 2
  Wend
Next
[F:IV].Delete
End Sub

Edit : j'ai supposé que même sur Excel 2007 le tableau ne dépassera pas la ligne 65536 et la colonne IV.

S'il peut dépasser ces limites dites-le, je modifierai légèrement la macro.

A+
 

Pièces jointes

Dernière édition:
Re : VBA - transformer des colonnes en lignes

Re,

Pour éviter le couper ou copier/coller qui prennent trop de temps de calcul, procéder comme suit :

- mettre les colonnes A à E au format Texte (pour conserver les zéros devant les nombres)

- faire un transfert des valeurs avec cette macro :

Code:
Sub Regrouper()
Dim lig&, lig1&, col%
Application.ScreenUpdating = False
For lig = [A65536].End(xlUp).Row To 2 Step -1
  lig1 = lig + 1
  col = 6
  While Cells(lig, col) <> ""
    Rows(lig1).Insert
    Cells(lig1, 4).Resize(, 2) = Cells(lig, col).Resize(, 2).Value
    Cells(lig1, 1).Resize(, 3) = Cells(lig, 1).Resize(, 3).Value
    lig1 = lig1 + 1
    col = col + 2
  Wend
Next
[F:IV].Delete
End Sub
Fichier(2).

A+
 

Pièces jointes

Re : VBA - transformer des colonnes en lignes

remercie!!
ça me donne vraiment envie de me plonger à fond dans le VBA. T'as un livre que tu recommandes pour s'initier job75 ??
J'essaye de bien comprendre le code mais j'ai encore un petit doute.

Le resize c'est pour sélectionner plusieurs champs ? (sur l'aide F1 c'est pas super bien expliqué même si ça parait logique dans ton code)

On créée une ligne sous la ligne qu'on veut copier
Code:
Rows(lig1).Insert
Sur cette ligne on se positionne sur la 4eme colonne, on prend 2 champs (resize?) et on copie la valeur des deux champs de la colonne d'au dessus.
Code:
Cells(lig1, 4).Resize(, 2) = Cells(lig, col).Resize(, 2).Value

J'ai tout bon ?

Et sur le premier code je ne comprenais pas pourquoi il y avait un espace entre le CUT et le 2eme CELLS
Code:
Cells(lig, col).Resize(, 2).Cut Cells(lig1, 4)

merci d'avoir passé du temps à optimiser le code en tout cas!
 
Re : VBA - transformer des colonnes en lignes

Re,

Oui je pense que vous avez compris le Resize :

Code:
plage.Resize(n1, n2)
redimensionne plage en lui donnant n1 lignes et n2 colonnes, la 1ère cellule (en haut à gauche) restant la même.

Quant à l'espace après Cut ou Copy, c'est la syntaxe imposée par VBA, voyez l'aide.

A+
 
Re : VBA - transformer des colonnes en lignes

Bonsoir,

Merci à @jcf
Ah j'aime bien pour la fonction Resize que je ne connaissais pas et qui va m'éviter des calculs de plages de cellules lourdes à souhait (par exemple pour traiter un Sudoku)

Hellnar
 
Re : VBA - transformer des colonnes en lignes

Salut a tous,

Je souhaiterai faire exactement le contraire.

D'une liste en lignes je voudrais organiser mes données en colonne.

Pourriez vous me fournir le code VBA svp ?

Merci
 

Pièces jointes

Re : VBA - transformer des colonnes en lignes

ok, et ? C est interdit ?

Je suis bloqué je cherche de l'aide c est tout.

Si t'en as a m'apporter, je suis preneur.
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Réponses
7
Affichages
308
Réponses
2
Affichages
149
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…