Typage donnees VBA left/formule gauche

Bonjour,

A mon tour d'ouvrir un sujet car j'essayai de trouver une solution pour ce sujet, mais je me suis trouvé confronté à une incompréhension quand au résultat obtenu.
Pour faire court dans le classeur joint de trouve en A1 la donnée "68.95<br/>125.65".

Je cherchai à extraire la partie de gauche avant le <br/> soit 68.95. Par formule pas de soucis j'obtiens bien le résultat :

=GAUCHE(A1;CHERCHE("<br/>";A1)-1)

Cependant, par VBA, en utilisant la même logique, je me retrouve avec le résultat 68,95, donc ma valeur textuelle convertie automatiquement en nombre :

Sub TRANSFO()
With ThisWorkbook.Worksheets(1)
'    .Range("A:A").NumberFormat = "@"
    .Cells(1, 1) = Left(.Cells(1, 1), InStr(1, .Cells(1, 1), "<br/>") - 1)
End With
End Sub

J'ai réussi à contourner le problème en modifiant le typage de ma colonne via la ligne en commentaire, mais pourquoi la fonction GAUCHE formule EXCEL ne renvoi pas le même type de donnée que la fonction LEFT VBA ? Je sais que GAUCHE/DROITE/STXT renvoie une donnée textuelle mais alors pourquoi n'est pas le cas de LEFT (et je suppose RIGHT et MID ..)

Je reste perplexe, ce n'est peut être pas un gros problème mais ça me tracasse beaucoup dans la logique d'interprétation VBA ..

Merci à tous pour vos éclaircissements.

Cdlt,

12classeur1.xlsm (15.77 Ko)

Bonjour

Et en formatant préalablement ?

Le code comme ceci

Sub TRANSFO()
With ThisWorkbook.Worksheets(1)
    .Cells(1, 1).NumberFormat = "@"
    .Cells(1, 1) = Left(.Cells(1, 1), InStr(1, .Cells(1, 1), "<br/>") - 1)
End With
End Sub

Bonjour,

Comme ça oui ça reprend l'idée que j'ai évoquée plus haut. C'est la seule parade que j'ai trouvé, même Replace "," par "." ne fonctionne pas. J'avais aussi essayé un Cstr, mais la virgule était déjà là, j'avais juste mon nombre aligné comme du texte, mais avec cette fichue ",".

Mais je ne comprend pas car je pensais que Left fonctionnait comme GAUCHE et ne faisait pas de conversion automatique de type ... Sauf si Left sous VBA transforme la donnée dans le type défini par la colonne, donc un comportement différent de GAUCHE. C'est cette subtilité que j'essaie de faire confirmer.

Cdlt,

Bonjour à tous je suis pas sur d'avoir tout compris avec l'exemple.

Feuille 2 A1 la donnée "68.95<br/>125.65". résultat par formule en B1

Feuille 1 A1 la donnée "68.95<br/>125.65". résultat par macro en B1

Sub TRANSFO()
With ThisWorkbook.Worksheets(1)
    Range("B1").Value = Left(.Cells(1, 1), InStr(1, .Cells(1, 1), "") - 1)
End With
End Sub

Bonjour,

La solution pour trouver la valeur je l'ai !

Ce que je cherche à comprendre c'est pourquoi je n'ai pas le même résultat en utilisant la formule GAUCHE sous Excel qui me renvoie une valeur textuelle et Left sous VBA qui me renvoie une valeur numérique !

C'est dans la compréhension même de l'interprétation du code ou de la formule par EXCEL.

Ca ne vous choque pas que GAUCHE renvoie 68.95 tandis que Left renvoie 68,95 ? Vous pouvez me dire que c'est parce que ce n'est pas la même formule j'accepterai la question, mais je me suis dit qu'il y avait quelque chose de plus profond dans le compilateur VBA et sa relation avec les typages des cellules de la feuille ..

Cdlt,

A vérifier mais je pense qu'excel voit un chiffre et renvoie la virgule ou le point en fonction du paramétrage choisi dans window.

Ca ne vous choque pas que GAUCHE renvoie 68.95 tandis que Left renvoie 68,95

Avec GAUCHE on traite une information de texte et qui renvoie du texte tandis qu'avec LEFT, VBA traite l'info et vois un chiffre au final.

J'avoue que cela peut être perturbant toutefois

Ha ok. Effectivement même dans les exemples sur le net on peut voir sur l'utilisation de gauche le résultat aligné vers la gauche (donc reconnu en tant que texte)

çà ne me gène pas plus que çà car j'ai pris l'habitude de multiplier par 1 quand le résultat que je souhaite est un nombre.

=GAUCHE(A1;CHERCHE("<br/>";A1)-1)*1

Mais Dan à surement raison au final le vba retranscrit en nombre contrairement à la formule.. ce qui est encore plus perturbant si on récupére en vba un nombre

avec la virgule comme séparateur alors qu'on avait un point

Bonjour,

D'accord donc oui ce ne sont pas exactement les mêmes fonctions du coup.

Ca ne choque pas lorsque toutes les données sont sous le même format c'est vrai.

Le soucis c'est que j'avais des données non transformées en 68.95 par exemple et d'autres avec un <br/> qui devenaient alors 68,95. Si je passais par la suite une méthode TextToColumns en précisant le délimiteur à "." du coup je me retrouvais avec mes 68,95 en texte car alignés à gauche et les 68.95 en nombre de type 68,95 alignés à droite. Donc inexploitables avec des fonctions type SOMME etc...

D'où le fait que ça m'ai choqué/embêté. Apres comme j'avais la parade du numberformat, j'ai reussi a contourner, mais je n'avais pas mon explication racine de cette différence d'interprétation et comme je déteste ne pas comprendre ... D'où ce sujet !

Merci à vous deux ! Si d'autres ont des compléments, qu'ils n'hésitent pas !

Cdlt,

Édit : ah bah voilà tu tires la même tête que moi hier Xmenpl ahahah

Rechercher des sujets similaires à "typage donnees vba left formule gauche"