Application.Transpose et nombres caractères supérieurs à 256

Bonjour à tous,

Je reviens vers vous suite à mes problèmes en VBA. J'utilise application.transpose pour copier coller des lignes de la feuille "evaluations" à des lignes de la feuille "Feuil1" en fonction de références.

Le code ci-dessous fonctionne bien lorsqu'il s'agit de ligne comportant des cellules avec un nombre de caractères inférieur à 256.

Sub Bouton3_Cliquer()

Dim O1 As Worksheet 'déclare la variable O1 (Onglet 1)
Dim O2 As Worksheet 'déclare la variable O2 (Onglet 2)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (Tableau de Lignes)
Dim K As Integer 'déclare la variable K (incrément)
Dim PL As Integer 'déclare la variable PL (Première Ligne)
Dim J As Integer 'déclare la variable J (incrément)
Dim L As Byte 'déclare la variable L (incrément)
Dim T_TL As Variant

Set O1 = Sheets("Feuil1") 'définit l'onglet O1
Set O2 = Sheets("evaluations") 'définit l'onglet O2
TC = O1.Range("B1").CurrentRegion 'définit le tableau de cellules TC (onglet O1)

Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D

For I = 4 To UBound(TC, 1) 'boucle sur toutes les lignes I du tableau de cellules TC (en partant de la quatrième)
    D(TC(I, 1)) = "" 'alimente le dictionnaire D avec la valeur en colonne 2 de TC (Référence)
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste du dictionnaire D sans doublons
TC = O2.Range("A1").CurrentRegion 'redéfinit le tableau de cellules TC (onglet O2)
For I = 0 To UBound(TMP, 1) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
    Erase TL 'efface le tableau TL
    K = 1 'initialise la variable K
    'définit la ligne PL de la première occurrence trouvée de l'élément TMP(I) dans la colonne 3 (=C) de l'onglet O1
    PL = O1.Columns(2).Find(TMP(I), O1.Range("B3"), xlValues, xlWhole).Row
    For J = 2 To UBound(TC, 1) 'boucle 2 : sur toutes les lignes J du tableau de cellules TC (en partant de la seconde)
        'condition : si la valeur en ligne J colonne 1 de TC (Référence magasin) est égale à l'élément TMP(I)
        If TC(J, 1) = TMP(I) Then
            'redimensionne le tableau TL (autant de lignes que TC a de colonnes moins une, K colonnes)
            ReDim Preserve TL(1 To UBound(TC, 2) - 1, 1 To K)
            For L = 1 To UBound(TC, 2) - 1 'boucle 3 : sur les lignes L de TL
                TL(L, K) = TC(J, L + 1) 'alimente la ligne L de TL avec la colonne de TC (transposition)
            Next L 'prochaine ligne de la boucle 3
            K = K + 1 'incrémente K (ajoute une colonne à TL)
        End If 'fin de la condition
    Next J 'prochaine ligne de la boucle 2
    'si K est supérieur à 1, renvoie dans la cellule redimensionnée ligne PL, colonne 5 (=E) de l'onglet O1 le tableau TL transposé
    'If K > 1 Then O1.Cells(PL, 16).Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
    If K > 1 Then
    T_TL = Application.Transpose(TL)
    O1.Cells(PL, 16).Resize(UBound(TL, 2), UBound(TL, 1)).Value = T_TL
End If
Next I 'prochain élément de la boucle 1

End Sub

Cependant, quand le nombre de caractères est supérieur à 255, l'erreur 13 apparaît, et mentionne "incompatibilité de type".

La ligne suivante pose problème:

T_TL = Application.Transpose(TL)

En faisant quelques recherches, j'ai vu qu'application.transpose posait problème lors que des cellules contenaient 256 caractères ou plus: https://forum.excel-pratique.com/excel/limitation-fonction-transpose-vba-t41124.html

Comment puis-je modifier le code pour corriger ce problème? Ou du moins comment puis-je contourner cette limitation d'application.transpose sans devoir scinder une cellule contenant plus de 255 caractères en plusieurs cellules (car il ne s'agit que d'une partie de code parmi un grand morceau)?

Je vous joins un fichier ci-dessous.

En vous remerciant par avance pour votre aide.

Singertwist

21classeur10.xlsm (85.94 Ko)

Bonsoir,

pourquoi utiliser transpose dans ce cas précis ?

dans le fichier exemple fournis vous copiez une ligne vers une autre ligne, soit pas aux même références, mais cela reste une ligne...

transpose n'est-il pas fait pour copier une ligne de cellule en colonne ?

un simple copy/past ne marcherait-il pas mieux ?

@ bientôt

LouReeD

Rechercher des sujets similaires à "application transpose nombres caracteres superieurs 256"