[Résolu] Réordonner valeur en fonction des valeurs contenues dans les colonnes

Profane

XLDnaute Occasionnel
Bonjour à tous,
avant de commencer je vous souhaite une bonne année 2015 ;-)

pour ce qui est du soucis que je rencontre,
j' ai besoin de réordonner les données récupérés d'une extraction de + de 3000 lignes…
en gros c'est un redécoupage des données:
une duplication des colonnes A à C, tant qu'il y a des valeurs > 0, dans les colonnes D à Y

le détail est dans la piece jointe
merci à tous d'avance pour votre aide

Cordialement
 

Pièces jointes

  • MEF V1.xlsx
    12.9 KB · Affichages: 40
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Réordonnér valeur en fonction des valeurs contenues dans les colonnes

Meilleurs vœux pour cette nouvelle année Profane,

Un essai via une macro qui prend pour hypothèses :

  • les trois rubriques à partir de la colonne D se répètent dans le même ordre (FB, FQ, TLL)
  • les rubriques à partir de la colonne D sont indicées à partir de 1 jusqu'à 16 sans trou (FB1, FQ1, TLL1, FB2, FQ2, TLL2, ... , FB16, FQ16, TLL16)
  • si un groupe FBn, FQn, TLLn a chacune de ses valeurs égales à 0, alors le, groupe n'est pas recopié

Errata
:eek: : Un mauvais copier/coller dans le code de la version v1 empêchait l’affichage des valeurs de colonne "ligne". C'est corrigé dans la version v1a.


Le code est dans le module1 :
VB:
Sub redecouper()
Dim i&, i2&, j&, j2&, n&, x, ligne, tablo, res()

  Sheets("Fin").Range("A2:G" & Rows.Count).ClearContents
  Sheets("Depart").Select
  i2 = Range("A" & Rows.Count).End(xlUp).Row
  j2 = Cells(1, Columns.Count).End(xlToLeft).Column
  ReDim res(1 To i2 * (j2 / 3), 1 To 7)
  n = 0
  
  For i = 2 To i2
    tablo = Range(Cells(i, 1), Cells(i, j2))
    ligne = 0
    For j = 4 To j2 Step 3
      ligne = ligne + 1
      x = Abs(0 + tablo(1, j)) + Abs(0 + tablo(1, j + 1)) + Abs(0 + tablo(1, j + 2))
      If x > 0 Then
        n = n + 1
        res(n, 1) = tablo(1, 1): res(n, 2) = tablo(1, 2): res(n, 3) = tablo(1, 3)
        res(n, 4) = ligne
        res(n, 5) = tablo(1, j): res(n, 6) = tablo(1, j + 1): res(n, 7) = tablo(1, j + 2)
      End If
    Next j
  Next i
  
  Application.Goto Sheets("Fin").Range("a1"), True
  Range("A2").Resize(i2 * (j2 / 3), 7) = res
  MsgBox "C'est fini !"
End Sub
 

Pièces jointes

  • Profane-réarranger-v1a.xlsm
    21.7 KB · Affichages: 37
Dernière édition:

Profane

XLDnaute Occasionnel
Re : Réordonnér valeur en fonction des valeurs contenues dans les colonnes

Bonjour mapomme,
tes hypothéses sont justes (j'aurais du les préciser)
c'est exactement le résultat que je voulais :)
etant une quiche en VBA, jamais je n'aurais trouvé seul,
merci énormément.
Cordialement
 

Profane

XLDnaute Occasionnel
Re : Réordonnér valeur en fonction des valeurs contenues dans les colonnes

Bonjour Mapomme,
je reviens vers vous car je constate une "limitatation" de la macro
en effet jusqu'à 3855 lignes cela fonctione
au dela ca bug
une idee ?
Cordialement
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Réordonnér valeur en fonction des valeurs contenues dans les colonnes

Bonjour Profane,

(...) je reviens vers vous car je constate une "limitatation" de la macro (...) en effet jusqu'à 3855 lignes cela fonctionne (...) au delà ça bug (...) une idée ?
Il manquait un -1 quelque part dans le code mais aussi je n'avais pas adapté le code au nombre de lignes max de Excel2003 qui est beaucoup plus petit que pour Excel 2010.

J'ai refait une version v2 qui inscrit les résultats sur la feuille "Fin" par bloc de 7 colonnes. S'il y a beaucoup de lignes à écrire, on aura donc plusieurs groupes de colonnes.
 

Pièces jointes

  • Profane-réarranger-v2.xls
    50.5 KB · Affichages: 28

Discussions similaires

Statistiques des forums

Discussions
312 225
Messages
2 086 412
Membres
103 202
dernier inscrit
Claire2BM