XL 2016 Séquencer les données d'une ligne sur plusieurs en fonction des valeurs de cellule de la ligne

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

Ashgal

XLDnaute Nouveau
Bonjour à toutes et tous,

Je me retrouve face à un dilemme... et j'ai besoin d'aide.

J'ai une extraction d'un logiciel qui me sors un fichier Excel qui comporte des transactions à la ligne par "Bon de travaux".
Cependant, sur un "Bon" je peux avoir plusieurs type de prestations "Transport" "Taxe" et "Container"

Exemple basic :

N° BonDateClientMatièreRemarquesTvaMontant BonCout transportCout TaxeCout Container
2000101/04/2019123123Verre7.7%1751005025
2000202/04/2019123124Alu7.7%4251502750

Pour l'importation dans mon logiciel comptable, j'ai besoin d'une ligne par prestation.... forcement sinon ça ne serait pas drôle...

il me faudrait donc un format comme cela :

N° BonDateClientMatièreRemarquesTvaMontant BonType de coutCout
2000101/04/2019123123Verre7.7%175Transport100
2000101/04/2019123123Verre7.7%175Taxe50
2000101/04/2019123123Verre7.7%175Container25
2000202/04/2019123124Alu7.7%425Transport150
2000202/04/2019123124Alu7.7%425Taxe275

Je ne demande pas qu'on fasse tout à ma place mais plutot à comprendre comment je peux dire à Excel "Incremente moi une ligne avec les infos de la précédente, tant qu'il y a un montant dans les colonne 8,9,10 et mets les moi dans une meme colonne.

Par avance, je vous remercie infiniment du temps que vous pourriez passer sur mon problème.

Bien Cordialement.
 
Bon pour mettre les résultats dans une 2ème feuille, clic droit sur l'onglet, Visualisez le code et collez-y cette macro :
VB:
Private Sub Worksheet_Activate()
Dim tablo, resu(), i&, j%, n&, k%
tablo = Sheets("Bons").[A1].CurrentRegion.Resize(, 10) 'à adapter
ReDim resu(1 To 3 * UBound(tablo), 1 To 8)
For i = 2 To UBound(tablo)
    For j = 8 To 10
        If Val(Replace(tablo(i, j), ",", ".")) Then
            n = n + 1
            For k = 1 To 7
                resu(n, k) = tablo(i, k)
            Next
            resu(n, 8) = tablo(i, j)
        End If
Next j, i
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] 'à adapter
    If n Then .Resize(n, 8) = resu
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 8).ClearContents 'RAZ en dessous
End With
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Elle est très rapide car elle utilise des tableaux VBA.

A+
 

Pièces jointes

Je viens de tester, je suis impressionné par la simplicité d'action et la vitesse d’exécution.

Même pas de bouton à cliquer....

Je vais essayer d'adapter le code à mon tableau réel.
Si je galère, je reviendrais vous voir.

Merci mille fois en tout cas.
 
- 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
Retour