Transposition lignes

Bonjour,

J'aurai besoin d'un petit coup de main sur une formule.

Feuil1 : j'ai des colonnes avec écritures en partie double.

L'objectif serait de reprendre à chaque fois dans la Feuil2 une ligne sur deux des colonnes B, D, E de la Feuil1

D'avance, je vous remercie, bonne journée, cordialement, Chtixcel59

Bonjour à tous,

Il est nécessaire, pour une réponse appropriée, que nous ayons connaissance de votre version Excel (A préciser dans votre profil !)

Par ailleurs, sur la base de quel(s) critère(s) peut-on déduire que la somme à reporter est négative ?

Bonjour le fil, bonjour le forum,

Après avoir galéré sur la colonne des dates qui apparaissaient inversées (01/06/2022 au lieu de 06/01/2022) je te propose le code-ci-dessous qui semble fonctionner :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OS (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set OS = Worksheets("Feuil1") 'définit l'onglet source OS
Set OD = Worksheets("Feuil2") 'définit l'onglet destination OD
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) Step 2 'boucle sur toutes les lignes I du tableau des valeur TV par pas de 2 (en partant de la seconde)
    K = K + 1 'incrémente K
    ReDim Preserve TL(1 To 5, 1 To K) 'redimensionne le tableau des lignes TL (5 lignes, K colonnes)
    TL(1, K) = TV(I, 1) 'récupère le Nº dans la Ligne 1 de TL
    TL(2, K) = TV(I, 2) 'récupère la date dans la ligne 2 de TL
    TL(3, K) = TV(I, 4) 'récupère le type dans la ligne 3 de TL
    TL(4, K) = TV(I, 5) 'récupère le libellé dans la ligne 4 de TL
    TL(5, K) = IIf(TV(I, 7) <> "", TV(I, 7), -TV(I, 6)) 'récupère la valeur en fonction de sa colonne dans la ligne 5 de TL
Next I 'prochaine ligne de la boucle
If K = 0 Then Exit Sub 'si la variable K est égale à zéro, sort de la procédure
OD.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface les éventuelles anciennes données
OD.Columns(2).NumberFormat = "@" 'formate la colonne des dates en texte
OD.Range("A2").Resize(K, 5).Value = Application.Transpose(TL) 'renvoie dans A2 redimensionnée, le tableau TL transposé
OD.Columns(2).NumberFormat = "m/d/yyyy" 'formate la colonne des dates en date
End Sub

Bonjour,

Merci pour ce retour, j'ai vérifié ma version d'Excel, il s'agit selon ce que j'ai pu voir de la version Microsoft 365 Apps for Entreprise, je pense que c'est la version 10...

Concernant la macro, merci pour ce retour. Néanmoins, je suis néophyte dans ce domaine, il faut que je place la macro dans la Feuil1 ou la Feuil2 ou encore dans la feuille Workbook ?

Encore merci pour vos interventions, cordialement, Chti59xcel

Re-bonjour,

J'ai fini par comprendre le processus, il faut que j'insère un module, donc de ce côté là c'est fait.

Par contre j'ai un souci de décalage dans mon tableau par rapport à l'original, j'avais oublié de mettre les deux premières lignes du tableau dans la Feuil1 et la Feuil2, du coup la macro, elle bug. Est-ce qu'il serait possible de m'apporter la correction s'il vous plait.

Encore une fois, d'avance, merci, bien cordialement, Chti59xcel

Bonjour de nouveau,

Une approche, via Power Query (nativement intégré à votre version Excel) :

Menu "Données, Actualiser tout" pour rafraîchir les informations retournées par Power Query.

Re,

Le code modifié (pourquoi je m'emm***e à commenter les codes. Tu peux me le dire JFL ?) :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OS (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set OS = Worksheets("Feuil1") 'définit l'onglet source OS
Set OD = Worksheets("Feuil2") 'définit l'onglet destination OD
TV = OS.Range("A3").CurrentRegion 'définit le tableau des valeurs TV
For I = 4 To UBound(TV, 1) Step 2 'boucle sur toutes les lignes I du tableau des valeur TV par pas de 2 (en partant de la quatrième)
    K = K + 1 'incrémente K
    ReDim Preserve TL(1 To 5, 1 To K) 'redimensionne le tableau des lignes TL (5 lignes, K colonnes)
    TL(1, K) = TV(I, 1) 'récupère le Nº dans la Ligne 1 de TL
    TL(2, K) = TV(I, 2) 'récupère la date dans la ligne 2 de TL
    TL(3, K) = TV(I, 4) 'récupère le type dans la ligne 3 de TL
    TL(4, K) = TV(I, 5) 'récupère le libellé dans la ligne 4 de TL
    TL(5, K) = IIf(TV(I, 7) <> "", TV(I, 7), -TV(I, 6)) 'récupère la valeur en fonction de sa colonne dans la ligne 5 de TL
Next I 'prochaine ligne de la boucle
If K = 0 Then Exit Sub 'si la variable K est égale à zéro, sort de la procédure
OD.Range("A3").CurrentRegion.Offset(3, 0).ClearContents 'efface les éventuelles anciennes données
OD.Columns(2).NumberFormat = "@" 'formate la colonne des dates en texte
OD.Range("A4").Resize(K, 5).Value = Application.Transpose(TL) 'renvoie dans A4 redimensionnée, le tableau TL transposé
OD.Columns(2).NumberFormat = "m/d/yyyy" 'formate la colonne des dates en date
End Sub

Bonjour de nouveau,

Re,

Le code modifié (pourquoi je m'emm***e à commenter les codes. Tu peux me le dire JFL ?) :

Parce que vous l'âme pédagogue...... On ne se refait pas....

Bonjour à tous

Bonjour de nouveau,

Re,

Le code modifié (pourquoi je m'emm***e à commenter les codes. Tu peux me le dire JFL ?) :

Parce que vous l'âme pédagogue...... On ne se refait pas....

+1000

@Mgxcel59 : la version c'est 365 tout simplement à inscrire dans le profil

@Mgxcel59 + JFL : pourquoi utiliser un format xls périmé depuis plus de 14 ans ?

Bonjour de nouveau,

@Mgxcel59 + JFL : pourquoi utiliser un format xls périmé depuis plus de 14 ans ?

Par manque de vigilance ! Bien vu !

Bonjour,

Merci pour vos réponses et la correction de la macro.

J'avais essayé de la transformer moi-même avec les explications, mais je n'ai pas réussi malgré la démarche pédagogique initiée, désolé et encore merci.

Je vais aller corriger mon profil pour ma version d'Excel, au moins ça pourra toujours aidé.

Pour mes enregistrements Excel, en fait je ne sais pas trop maintenant à quel format je dois les enregistrer, donc si quelqu'un peut m'éclairer, ç'est toujours bon à prendre.

Bonne fin d'après-midi, grand merci, bien cordialement, Chti59xcel

RE

Sans VBA : xlsx

Avec VBA : xlsm

Bonjour,

Merci pour la réponse concernant l'enregistrement de mes fichiers Excel.

J'ai une autre question concernant la macro qui marche super bien, merci.

J'ai bien vu les explications en vert, néanmoins, comment la macro fait pour reconnaître qu'il s'agit d'un montant au crédit ou au dédit quand il va chercher les infos dans la Feuil1 avant de les renvoyer dans la Feuil2 ?

D'avance, merci pour vos réponses, bien cordialement, Chti59xcel

Bonjour le fil, bonjour le forum,

 TL(5, K) = IIf(TV(I, 7) <> "", TV(I, 7), -TV(I, 6)) 'récupère la valeur en fonction de sa colonne dans la ligne 5 de TL

Syntaxe : IIF(Test, Réponse si Test est [vrai], Réponse si Test est [faux])

Bonjour,

Merci pour le retour d'explications sur cette syntaxe :

 TL(5, K) = IIf(TV(I, 7) <> "", TV(I, 7), -TV(I, 6)) 'récupère la valeur en fonction de sa colonne dans la ligne 5 de TL

Syntaxe : IIF(Test, Réponse si Test est [vrai], Réponse si Test est [faux])

Je crois avoir compris que la formule prend en considération la première écriture soit dans la colonne 6 ou soit dans la colonne 7 pour déterminer la priorité après le remplissage de la colonne 5.

Bien cordialement, Chti59xcel

Bonjour le fil, bonjour le forum,

En fait ça dit : si la colonne 7 [ TV(I, 7) ] n'est pas vide, ça prend la colonne 7 [ TV(I, 7) ], sinon ça prend la colonne 6 en négatif [ -TV(I, 6) ] ...

Bonjour,

Je reviens vers vous car ce matin, j'ai pu tester en mode réel la macro et j'ai rencontré un souci.

Je rentre des écritures comptables en Feuil1 qui sont transposées ensuite en Feuil2 grâce à la macro.

Néanmoins, dans l'exemple de mon tableau en Feuil1, il y a une écriture qui ne doit pas être retransposée en Feuil2. En fait quand on enregistre des chèques, ensuite, il y a une écriture de synthèse qui fait le rappel et indique le dépôt en banque, mais n'a pas besoin d'être comptabilisé deux fois en Feuil2.

Puis, je ne sais pas pourquoi, il ne me fait plus la somme en Feuil2 ?

Merci pour votre aide, cordialement, Chti59xcel

Re,

À aucun moment tu navet parlé de ça dans tes posts. On ne peut pas le deviner. Quant à la somme, elle se fait mais elle est nulle avec le -370. Comme je n'ai pas envie de modifier le code chaque fois que tu te rends compte que tu as mal expliqué, donne nous la liste complète des cas où les ligne ne doivent pas être prises en compte... On avisera...

Bin oui je comprends,

Je viens seulement de voir pourquoi la somme ne se fait pas avec tes explications, ce qui montre mes lacunes.

parfois, on a la réponse devant les yeux et on le la voit pas, désolé.

Dans la feuil2, on devrait quand même avoir un résultat de 370 € en positif, sachant que l'écriture de remise des chèques, n'est qu'une transposition comptable mais qui ne doit pas influencer le résultat. Dans l'idée, la Feuil1, c'est le journal d'écritures, la Feuil2, c'est plutôt une transposition de ce qui se passe sur le compte de banque et qui doit servir aux rapprochements.

J'ai bien réfléchi à ta question sur d'autres situations possibles, il faut que je revois ma copie

A bientôt, cordialement, Chti59xcel

Rechercher des sujets similaires à "transposition lignes"