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 :eek:
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 ..:rolleyes:
 

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.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 020
dernier inscrit
Mzghal