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

tableau inversé

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

J

jeep90

Guest
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

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
 
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.
 
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
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

G
Réponses
3
Affichages
775
Réponses
37
Affichages
3 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…