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

tableau inversé

jeep90

XLDnaute Nouveau
Bonjour tous,

J'ai un tableau à 2 entrées (150 lignes x 95 colonnes) et je voudrais transformer ce tableau en "données brutes", c'est à dire, sur 2 colonnes...
La fonction "copier/coller transposé" est proche de ma réponse mais pas exactement.. Je pense qu'on ne peut échapper à une macro
Ci joint, je vous adresse un fichier pour explication..
En vous remerciant vivement par avance
Sincères salutations
 

Pièces jointes

  • test tableau inversé.xls
    23.5 KB · Affichages: 90
  • test tableau inversé.xls
    23.5 KB · Affichages: 89
  • test tableau inversé.xls
    23.5 KB · Affichages: 88

jeep90

XLDnaute Nouveau
Re : tableau inversé

oupppss désolé, je me suis trompé de tableau je crois..
Bon, second envoi ..
 

Pièces jointes

  • test tableau inversé.xls
    38 KB · Affichages: 58
  • test tableau inversé.xls
    38 KB · Affichages: 63
  • test tableau inversé.xls
    38 KB · Affichages: 63

ROGER2327

XLDnaute Barbatruc
Re : tableau inversé

Re...
Il aurait été préférable de savoir exactement ce que vous vouliez dès le début. Le code aurait été conçu différemment. Mais je n'ai pas envie de recommencer à zéro.
Voici donc un bricolage sur l'existant :
Code:
[COLOR="DarkSlateGray"][B]Sub tableau_inverse()
Dim oDat, fDat, sDat, l As Long, c As Long, i As Long, j As Long, k As Long
Dim nomCh, formCh, cel As Range
   nomCh = Array("cp", "N° rue", "nombre 1", "nombre 2", "total 1", "total 2")
   formCh = Array("00000", "0#", "# ##0.00", "# ##0.00", "# ##0.00", "# ##0.00")
   oDat = WorksheetFunction.Transpose(Sheets("Feuil1").[A6:H11].Value)
   Set fDat = Sheets("Feuil1").[A6:H11]
   l = UBound(oDat, 1)
   c = l * (UBound(oDat, 2) - 1)
   ReDim sDat(1 To 2, 1 To c)
   For i = 0 To UBound(oDat, 2) - 2
      For j = 1 To l
         If IsEmpty(oDat(j, i + 2)) Then
            k = k + 1
         Else
            sDat(1, j - k + i * l) = oDat(j, 1)
            sDat(2, j - k + i * l) = oDat(j, i + 2)
            If IsNumeric(sDat(2, j - k + i * l)) Then sDat(2, j - k + i * l) = Round(sDat(2, j - k + i * l), 0)
         End If
      Next j
   Next i
   ReDim Preserve sDat(1 To 2, 1 To c - k)
   Application.ScreenUpdating = False
   With Sheets("Feuil2")
      .Activate
      With .[A1]
         .CurrentRegion.ClearContents
         With .Resize(c - k, 2)
            .Value = WorksheetFunction.Transpose(sDat)
            k = UBound(nomCh)
            For Each cel In .Columns(1).Cells
               For i = 0 To k
                  If cel.Value2 = nomCh(i) Then Exit For
               Next i
               If i <= k Then cel.Offset(0, 1).NumberFormat = formCh(i)
            Next cel
         End With
      End With
   End With
   Application.ScreenUpdating = True
End Sub[/B][/COLOR]
ROGER2327
#2201
 

jeep90

XLDnaute Nouveau
Re : tableau inversé

effectivement, je n'ai pas toujours été précis car je travaille a partir d'un cahier technique avec des contraintes de toutes sortes que je découvre a chaque page..Je vous prie donc de m'en excuser.
Mais votre "bidouillage" est parfait, car il m'a bien aidé .. Je pense avoir fait le tour de tous les problèmes et je vous remercie sincèrement pour votre aide et votre dévouement désinteressé.. Je reste subjugué de voir des Excelliens (et Excelliennes) jongler avec tant d'aisance ce language mysterieux et ésotérique qu'est le VBA
Bref, encore merci à vous et bonne soirée.
 

JCGL

XLDnaute Barbatruc
Re : tableau inversé

Bonjour à tous,

Je n'ai pas participé "techniquement" à cette discussion.

Ton "Mea Culpa" t'honore et devrait porter ses fruits...

Au plaisir de te croiser

A+ à tous
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…