Convertir en nombre avec macro

Bonjour à tous,

j'importe dans excel des données venant d'un progiciel.

Le soucis c'est qu'il importe avec des . au lieu de , et que certains nombre sont en fait en texte, et je dois cliquer sur convertir en nombre..

J'aimerais avoir une macro qui seléctionne le tableau (ctrl A) qui fasse la mise en page (Ctrl L).. mais surtout qu'il transforme automatiquement les textes en nombres et qu'il remplace si possible les . par des ,

Ci joint mon fichier de base :)

Merci de votre aide

50conversion.xlsx (11.97 Ko)

Bonjour,

Un test à insérer dans un module standard sous l'éditeur VBA avant exécution :

Sub CONVERT()
Dim C As Byte
With Worksheets("Gamme référence")
    For C = 4 To 6
        .Columns(C).TextToColumns .Cells(1, C), FieldInfo:=Array(1, 1), DecimalSeparator:="."
    Next C
End With
End Sub

Cdlt,

Hello ergotamine,

je l'ai appliqué sur mon fichier de base et je ne trouve pas dans ta macro ou je dois étendre ma séléction pour que toutes les colonnes passent en nombre... et que ma dernière cellule passe de . à , ?

merci de ton aide

26conversion-2.xlsx (11.90 Ko)

Bonjour,

Pour adapter le code quelque soit le nombre de colonne une version améliorée :

Sub CONVERT()
Dim C As Byte, LC As Byte
With Worksheets("Gamme référence")
    LC = .Cells(1, .Columns.Count).End(xlToLeft).Column 'Défini la dernière colonne de la 1ère ligne
    For C = 4 To LC 'Pour chaque colonne de la colonne 4 à la dernière colonne
        If .Cells(2, C) <> "" Then .Columns(C).TextToColumns .Cells(1, C), FieldInfo:=Array(1, 1), DecimalSeparator:="." 'Si la cellule de la ligne 2, colonne C n'est pas vide alors on converti
    Next C 'Passe à la colonne suivante
End With
End Sub

J'en ai profité pour commenter le code afin que vous le compreniez et le mainteniez si nécessaire.

Cdlt,

merci ergotamine !!!!

c'est nickel :)

et une question sur une macro que j'ai fait aussi.. j'ai un soucis ci dessous il me selectionne de A1, à I65..alors que moi mon nombre de lignes n'est pas fixe... tu saurais comment faire ?

Sheets("Gamme Ref JACC").Select

13conversion3.xlsx (25.43 Ko)

Range("A1:I65").Select
Application.CutCopyMode = False
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$I$65"), , xlYes).Name = _
"Tableau1"
Range("J1").Select
ActiveCell.FormulaR1C1 = "Stock vendable2"
Range("J2").Select
ActiveCell.FormulaR1C1 = "=VALUE([@[Stock vendable]])"
Range("K1").Select
ActiveCell.FormulaR1C1 = "stock total2"
Range("K2").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=VALUE([@[Stock total]])"
Range("Tableau1[#All]").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
ActiveWindow.SmallScroll Down:=-72
Range("M8").Select

ActiveWorkbook.Worksheets("Gamme Ref JACC").ListObjects("Tableau1").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Gamme Ref JACC").ListObjects("Tableau1").Sort. _
SortFields.Add2 Key:=Range("Tableau1[[#All],[Stock vendable2]]"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Gamme Ref JACC").ListObjects("Tableau1").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Columns("F:G").Select
Selection.EntireColumn.Hidden = True
Range("Tableau1[[#Headers],[Commentaires]]").Select
ActiveCell.FormulaR1C1 = "Prix rayon"
Range("I2").Select
Columns("A:A").EntireColumn.AutoFit

Bonjour,

Un équivalent qui me semble un peu plus assaini. A tester sur un nouveau fichier :

Sub TABLEAU()
With ActiveSheet
    .ListObjects.Add(xlSrcRange, .UsedRange, , xlYes).Name = "Tableau1"
    .Range("J1") = "Stock vendable2"
    .Range("J2").FormulaR1C1 = "=VALUE([@[Stock vendable]])"
    .Range("K1") = "stock total2"
    .Range("K2").FormulaR1C1 = "=VALUE([@[Stock total]])"
    .Range("I1") = "Prix rayon"
    .Range("Tableau1[#All]").Replace What:=".", Replacement:=",", LookAt:=xlPart
    .ListObjects("Tableau1").Sort.SortFields.Clear
    .ListObjects("Tableau1").Sort.SortFields.Add2 .Range("Tableau1[[#All],[Stock vendable2]]"), xlSortOnValues, xlAscending, xlSortNormal
    .Columns("F:G").EntireColumn.Hidden = True
    .Columns(1).EntireColumn.AutoFit
End With
End Sub

Cdlt,

image

hello, voila ce qu'il me met quand je lance cette macro :(

Bonjour à toutes et tous,

Un peu confus tout cela !?

Cdlt.

Public Sub CreateTable()
Dim lo As ListObject, nm As String, lCol As Long
    With ActiveSheet    'Gamme Ref JACC
        nm = "T_" & VBA.Right(.Name, 4) 'T_JACC
        Set lo = .ListObjects.Add(xlSrcRange, .Cells(1).CurrentRegion, , xlYes)
    End With
    With lo
        .Name = nm
        .TableStyle = "TableStyleLight11"
        .HeaderRowRange.EntireColumn.AutoFit
        For lCol = 4 To 7
            .ListColumns(lCol).DataBodyRange.TextToColumns _
                    FieldInfo:=Array(1, 1), _
                    DecimalSeparator:="."
        Next lCol
        .Sort.SortFields.Add .ListColumns(6).DataBodyRange, xlSortOnValues, xlAscending
        .Sort.Apply
        .Sort.SortFields.Clear
    End With
End Sub

Bonjour à tous

j'importe dans excel des données venant d'un progiciel.

Tu importes comment ? Quel est le format du fichier ?

Cela se traite en amont : en important avec PowerQuery intégré à ta version, tu dois pouvoir directement paramétrer le format pour l'import ou au pire modifier très facilament.

Bonjour à tous,

@jean-talus, retirez le ' que vous avez placé devant votre With ActiveSheet qui fait passer l'objet en commentaire et donc casse la dépendance du .usedrange qui n'est plus reconnu.

Cldt,

Merci à tous pour votre aide,

Ergotamine, bien vu ça marche mieux comme ça !!

Jean-Eric, merci !!! en effet ça allège avec votre macro :)

78chris, ça arrive en csv.. je n'utilise pas power query, et j'ai essayé de trouver dans les compléments... je ne trouve pas... est-ce power pivot ?

En tout merci à tous, j'avance de mes bidouillages grâce à vous !!! et ça me fait gagner un temps fou :)

RE

PowerQuery est totalement intégré à Excel depuis 2016 : accès dans l'onglet Données

Joins éventuellement le csv car ce serait 1000 fois plus simple d'importer ainsi que de bricoler en VBA

rebonjour 78chris,

en fait c'est un excel que j'importe... j'ai trouvé power query dans les données en effet ça pourrait être la solution pour tout simplifier

voici le fichier à partit duquel je travaille.

ce sont toujours les mêmes colonnes, par contre le nombre de lignes change... mon but est de trier la colonne stock vendable et d'avoir le nombre de produits à 0 en stock, et le CA potentiel perdu (stock vendable à 0 * pv des produits..)

A ta dispo pour découvrir ce nouveau outil pour moi sur excel.

Merci

RE

Une première ébauche : modifier le chemin/nom du fichier puis Données, Actualiser tout

Si tu as un message d'erreur :
Lancer PowerQuery puis Fichier, Options et paramètres, Options de requête, partie GLOBAL : Confidentialité, Toujours ignorer les paramètres de niveau de confidentialité

Cela supprimera le message d'erreur.
A noter que cette option ne sert à rien dans la quasi totalité des cas et limite les possibilités, d'où son décochage.

16import-pq.xlsx (20.64 Ko)

Top Chris, merci de vais tester et essayer de m'amuser avec :)

Rechercher des sujets similaires à "convertir nombre macro"