Convertion en Nb en VBA

Hello

J'extrais régulièrement des BD d'un logiciel si bien que sous excel les cellules avec des chiffres ne sont pas connues par défaut en nombre. (voir PJ)

Et même si dans le format de cellule je les bascule en nombre, ca ne suffit pas.

J'ai 2 façons de les convertir en nombre :

  • cliquer sur le message d'erreur de la cellule - convertir en nb
  • ou plus rapide : je sélectionne la colonne complète, onglet données - convertir - et je clique juste sur terminer.

C'est cette méthode que j'utilise dans une macro enregistrée mais ca donne le code suivant par exemple pour la colonne B

Columns("B:B").Select
    Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 1), TrailingMinusNumbers:=True

Ca marche très bien mais ce code est incompréhensible.

Comme je tente de coder désormais mes macros moi même, je ne trouve pas le code manuel à mettre en place pour convertir mes colonnes de chiffre en nombre.

Bonjour,

je viens de voir la documentation de la fonction TextToColumns, j'ai vu que :

Columns("B:B").Select

Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _

TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _

Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _

:=Array(1, 1), TrailingMinusNumbers:=True

datatype sert à dire comment tu veux séparer tes valeurs, ici avec un délimiteur

text qualifier c'est pour savoir ce qui représente du texte, ici des guillemets

ConsecutiveDelimiter sert à dire si on considère des séparateurs consécutifs comme un seul et même séparateur.

ensuite tu as les cases à cocher qui permettent de savoir qu'est ce qui délimite tes données, tu as une valeur true ou false pour chaque possibilité, ensuite tu as FieldInfo, c'est ce qui va définir le type de données qu'accueillera la colonne n°x en partant de B1 qui est la cellule de destination, le premier 1 c'est pour première, le deuxième permet de dire que tu veux convertir tes données en format Standard.

enfin le trailingMinusNumbers c''est pour dire que des nombres commencent par un signe moins apparemment.

En clair, toi tu vas vouloir convertir d'autres colonnes, la E par exemple en nombre, tout ce que tu auras à faire c'est de changer B:B par E:E, et B1 par E1, les autres options seront les mêmes

Ok c'est très clair mais il n'existe pas un code plus simple pour la même opération?

Car perso si j'avais voulu crée le code je n'aurais jamais pensé à tout ça ^^

Bon après je sais que quand on débute, faire un copier coller d'un code enregistré reste très pratique.

De plus si je veux faire plusieurs colonnes à la fois je suis obligé de retaper le code pour chaque colonne.

C'est d'ailleurs en effet ce qu'on est obligé de faire sans macro : je ne peux pas sélectionner plusieurs colonne - onglet données - convertir

Bonjour le fil, bonjour le forum,

Ce code permet de faire un collage avec multiplication. En effet, c'est une solution souvent applicable que de multiplier une cellule par 1 pour la transformer en nombre dans Excel.

Manuellement ça donne :

  • Tape 1 dans une cellule en dehors (G1, par exemple)
  • Sélectionne G1
  • Copie ([Ctrl]+[C])
  • Sélectionne la plage de la colonne B
  • Menu Collage spécial
  • Dans la partie Opération sélectionne Multiplication
  • Valide

J'imagine que le code prend en compte le contenu du presse-papier puis qu'il ne parle pas de G1...

Ok c'est très clair mais il n'existe pas un code plus simple pour la même opération?

Car perso si j'avais voulu crée le code je n'aurais jamais pensé à tout ça ^^

Bon après je sais que quand on débute, faire un copier coller d'un code enregistré reste très pratique.

En fait c'est le code le plus court d'après moi

ce code correspond juste à la fonction utilisée

en revanche, je vois que l'enregistreur de macro met False à des valeurs qu'on est pas obligé de préciser, et qui valent False par défaut, c'est le cas de Comma par exemple, normalement ce code devrait faire la même chose:

Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
 TextQualifier:=xlDoubleQuote, Tab:=True, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True

Pour une boucle tu pourrais faire:

Dim colTraiter As Variant

colTraiter = Array("B", "E", "X")

For i = LBound(colTraiter, 1) To UBound(colTraiter, 1)
    Columns(colTraiter(i) & ":" & colTraiter(i)).TextToColumns Destination:=Range(colTraiter(i) & "1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, Tab:=True, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
Next i

à tester bien entendu

J'ai du déclarer la variable i dans ton code mais ca marche nickel!

Ca me permet de sélectionner toutes les colonnes que je veux convertir et de tout faire d'un coup!

Merci à vous 2 pour vos explications!

Rechercher des sujets similaires à "convertion vba"