XL 2016 Texte "True"/"False" modifiés après utilisation de Transpose sous VBA

Mirija

XLDnaute Nouveau
Bonjour à tous, j'ai un petit soucis lors d'une extraction de données en utilisant scripting.dictionnary puis .transpose.
En général, ça marche bien : sur plus de 200 000 mots traités, ça fonctionne bien sauf sur 2 mots : "True" et "False" qui sont traduits par "VRAI" et "FAUX" après l'extraction.
Je tourne en rond depuis un moment sans trouver de solutions. J'aimerai garder les mots extraites à l'identique (True/False et non Vrai/Faux). Pourriez-vous m'aider svp?
 

xUpsilon

XLDnaute Accro
Bonjour,

Force l'écriture en tant que string ? Si tu ne précises pas, il va lire ça en tant que Boolean.
Je ne sais pas comment se comporte ton code mais regarde l'utilisation de la fonction cstr() qui permet de convertir en string, ou sinon stocke tes valeurs d'abord dans une variable déclarée string, avant d'écrire cette variable dans ton dictionnary, plutôt que d'écrire directement dedans.

Bonne journée,

Quoi qu'il en soit sans fichier/exemple, difficile de t'aider.
 

Mirija

XLDnaute Nouveau
Merci pour la réponse, en effet c'est mieux avec une exemple. Au fait dans l'exemple qui suit, j'ai 4 listes de mots à comparer, avec lesquelles je fais une extraction des mots présents sur les 3 premières listes mais non présente dans la 4ème (j'ai opté pour cette méthode car j'aurai besoin de traiter plusieurs lignes avec).
Et comme on peut voir, les mots sortent bien mais "false" et "true" sont transcrits en "VRAI" et "FAUX".
Pourriez-vous montrer comment on peut faire cette manip? merci d'avance
(NB : le code est assez long et brouillon est peut probablement être apuré :) )
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Mirija :), @xUpsilon ;),

Essayez ce code dans Module4:
VB:
Sub DansBDFPasDansH()
Dim der&, dermax, t, d(1 To 4), i&, col&, k&, bad, x
   With Sheets("liste")
      der = .UsedRange.Row + .UsedRange.Rows.Count - 1
      t = .Range("b2:h" & der)
      For i = 1 To 4
         Set d(i) = CreateObject("scripting.dictionary")
         d(i).CompareMode = vbTextCompare
         col = 1 + 2 * (i - 1)
         For k = 1 To UBound(t)
            If t(k, col) <> "" Then d(i)(t(k, col)) = ""
         Next k
      Next i
      For Each bad In d(4)
         If d(1).exists(bad) Then d(1).Remove bad
      Next bad
      For Each x In d(1)
         If Not d(2).exists(x) Then d(1).Remove x
      Next x
      For Each x In d(1)
         If Not d(3).exists(x) Then d(1).Remove x
      Next x
      .Range("j2:j" & der).ClearContents: i = 1
      If d(1).Count > 0 Then
         ReDim r(1 To d(1).Count + 1, 1 To 1)
         r(1, 1) = .Range("j1"): i = 1
         .Range("j2:j" & d(1).Count).NumberFormat = "@"
         For Each x In d(1): i = i + 1: r(i, 1) = x: Next
         .Range("j1").Resize(UBound(r), 1) = r
         Range("j1").Resize(UBound(r), 1).Sort key1:=.Range("j1"), order1:=xlAscending, MatchCase:=False, Header:=xlYes
      End If
   End With
End Sub
 

Pièces jointes

  • Mirija- filtrer 4 listes- v2.xlsm
    40.4 KB · Affichages: 3
Dernière édition:

Statistiques des forums

Discussions
314 496
Messages
2 110 235
Membres
110 708
dernier inscrit
novy16