IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème de format texte en nombre


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    chef de service
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : chef de service

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Par défaut Problème de format texte en nombre
    Bonsoir le forum,

    Je vous expose le problème:

    Dans mon userform qui n'est autre qu'un formulaire de saisie, j'ai un combo initialisé au chargement qui contient des nombres décimaux, 0.25, 0.5, 0.75, 1.00, 1.25, 1.50, etc ...vous avez compris que le pas est de 0.25.

    Lorsque je clic sur valider la valeur saisie vient incrémentée les cellules d'une colonne qui sera ensuite traitée via un TCD. "Ci-joint le code de renvoie après validation"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("o65536").End(xlUp).Offset(1, 0).Value = Format(Temps, "# ##0,00")
    le problème est que le renvoie se fait bien au format nombre mais que la valeur est arrondie à l'entier dans la cellule de destination.
    Ex: 0.25 devient 0,
    0.75 devient 1
    1.75 devient 2 etc............

    Je vous joint une photo du formulaire avec la feuille de destination en arrière plan et le code entier du formulaire de saisie afin que vous puissiez vous faire une idée précise du problème.

    Nom : Capture.JPG
Affichages : 479
Taille : 136,5 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
     
     
    'Déclaration des variables
     
    Dim Liste, Gardes, Sequence, Durée, NbCol, L, a()
     
    Sub userform_initialize()
     
    Gpt.Value = (Sheets("Rens_sdis").Range("a2")) 'Groupement
    Zone.Value = (Sheets("Rens_sdis").Range("b2")) 'Zone
    Centre.Value = (Sheets("Rens_sdis").Range("c2")) 'Centre
     
      NbCol = 4 'Nombre de colonnes de la liste sur la feuille Thèmes
      L = 200 'Nombre de lignes dans la liste
      ReDim a(1 To L, 1 To NbCol)
      Me.choix.MultiSelect = fmMultiSelectMulti
      Me.choix.ColumnCount = NbCol
      Me.choix.ColumnWidths = "130;30;30;40"
      'Remplissage des colonnes 1 à 3 de la listbox nommée choix,
      Set Liste = Sheets("Agents")
      Set Thèmes = Sheets("Thèmes")
      Set Durée = Sheets("Rens_sdis")
      Set Gardes = Sheets("Rens_sdis")
      'Remplir la ligne jusqu'à la dernière ligne trouvée
       Me.choix.List = Range(Liste.[a4], Liste.[d65000].End(xlUp)).Value   ' liste des noms
       Me.Sequence_pédagogique.List = Range(Thèmes.[c3], Thèmes.[c65000].End(xlUp)).Value    'liste des séquences
       Me.Temps.List = Range(Durée.[i5], Durée.[i65000].End(xlUp)).Value     '  liste des durées
       Me.Equipe_garde.List = Range(Gardes.[d5], Gardes.[g65000].End(xlUp)).Value
      'Option de sélection multiple
     
     
    End Sub
     
    Private Sub cmdValider_Click()
    ' On teste la saisie du thémes de manoeuvres
            If Me.Equipe_garde.Text = "" Then
            MsgBox "Vous devez entrer une équipe de garde"
           Me.Equipe_garde.SetFocus
            Exit Sub
        End If
    ' On teste la saisie de la dat
        If Me.DateSaisie.Text = "" Then
            MsgBox "Vous devez entrer une date."
            Me.DateSaisie.SetFocus
            Exit Sub
        End If
            If Not IsDate(DateSaisie.Text) Then
            MsgBox "format incorrect"
            DateSaisie.Text = ""
            Exit Sub
        End If
           'On teste la saisie de  l'agent
           If Me.Equipe_garde.Value = "" Then
           MsgBox "Vous devez entrer un Nom."
           Me.Equipe_garde.SetFocus
           Exit Sub
        End If
        ' On teste la saisie du thémes de manoeuvres
            If Me.Sequence_pédagogique.Text = "" Then
            MsgBox "Vous devez entrer une Sequence pédagogique."
           'Me.Sequence_pédagogique.SetFocus
            Exit Sub
        End If
        ' On teste la saisie de  l'agent
        If Me.Temps.Value = "" Then
            MsgBox "Vous devez entrer un temps de formation ."
            Me.Temps.SetFocus
            Exit Sub
        End If
        Dim bOk As Boolean 'On teste la saisie de  l'agent
    bOk = False
    For w = 0 To Me.choix.ListCount - 1
        If Me.choix.Selected(w) = True Then
            bOk = True
            Exit For
        End If
    Next w
    If bOk Then
        'c'est bon
    Else
        MsgBox "Vous devez entrer au moins un Nom"
        Me.choix.SetFocus
        Exit Sub
    End If
    'Endroit de la feuille où remplir la base
    Dim k As Byte                  ' boucle sur la listbox et transfert les données contenues dans les différents controls
    For k = 0 To Me.choix.ListCount - 1
    If Me.choix.Selected(k) = True Then
     ligne = ligne + 1
     
         For c = 0 To NbCol - 1 'boucle sur les colonnes
     
           a(ligne, c + 1) = Me.choix.List(k, c)
    Next c
    Range("a65536").End(xlUp).Offset(1, 0).Value = DateSaisie ' remplissage de la  colonne date
    Range("b65536").End(xlUp).Offset(1, 0).Value = Format(DateSaisie, "mmmm")  ' remplissage de la  colonne mois
    Range("c65536").End(xlUp).Offset(1, 0).Value = Format(DateSaisie, "yyyy") ' remplissage de la  colonne Année
    Range("d65536").End(xlUp).Offset(1, 0).Value = Gpt ' remplissage de la  colonne groupement
    Range("e65536").End(xlUp).Offset(1, 0).Value = Zone ' remplissage de la  colonne zone
    Range("f65536").End(xlUp).Offset(1, 0).Value = Centre ' remplissage de la  colonne centre
    Range("g65536").End(xlUp).Offset(1, 0).Value = Format(Equipe_garde, "0") ' remplissage de la  colonne Equipe_garde
    Range("l65536").End(xlUp).Offset(1, 0).Value = Module         ' remplissage de la  colonne module
    Range("m65536").End(xlUp).Offset(1, 0).Value = Thème           ' remplissage de la  colonne uv
    Range("n65536").End(xlUp).Offset(1, 0).Value = Sequence_pédagogique  ' remplissage de la  colonne Sequence
    Range("o65536").End(xlUp).Offset(1, 0).Value = Format(Temps, "# ##0,00")    ' remplissage de la  colonne temps
    Range("p65536").End(xlUp).Offset(1, 0).Value = Format(Formation, "0")        ' remplissage de la  colonne for
    Range("q65536").End(xlUp).Offset(1, 0).Value = Format(Abs_for, "0")       ' remplissage de la  colonne Abs for
     
    End If
     
    Next k 'boucle sur les lignes
    Range("h65536").End(xlUp).Offset(1, 0).Resize(UBound(a), NbCol) = a 'remplissage de la  colonne grade, nom ,statut
    'Call nombre
      Dim intRet As Integer
     Dim y As Control
    intRet = MsgBox("Veux tu enregistrer une nouvelle date, ou appuie sur non pour fermer le programme", vbInformation + vbYesNo, " Enregistrement effectué avec succès")
    If intRet = vbYes Then
        DateSaisie.Value = ""
         Module.Value = ""
          Thème.Value = ""
           Formation.Value = ""
            Abs_for.Value = ""
         userform_initialize
     For Each y In Me.Controls
       Select Case TypeName(y)
            Case "ComboBox"
              y.ListIndex = -1
         End Select
      Next y
    Else
    If intRet = vbNo Then
            'procédure si click sur Non les combos sont vidé
    ActiveWorkbook.Save
    Unload Me
    UserForm2.Show
    End If
    End If
    End Sub
     
    Private Sub Sequence_pédagogique_Click()
     
      ligne = Sheets("Thèmes").[c:c].Find(Sequence_pédagogique, LookIn:=xlValues).Row
       Me.Module = Sheets("Thèmes").Cells(ligne, 1)
       Me.Thème = Sheets("Thèmes").Cells(ligne, 2)
     
        Dim Tbl
        Dim Tbl2
        Dim x As Integer
        Dim y As Integer
        Dim Retour_for As Integer
        Dim Retour_Abs As Integer
     
        Tbl = Array("SAP", "OPD", "INC", "SR", "Fdf", "CAD")
        For x = 0 To UBound(Tbl)
        If Module.Text = Tbl(x) Then Retour_for = 1: Exit For ' renvoie 1 si la txt module est = à une valeur de la table
        Next x
        Formation = Retour_for
     
        Tbl2 = Array("Abs for")
        For y = 0 To UBound(Tbl2)
        If Module.Text = Tbl2(y) Then Retour_Abs = 1: Exit For ' renvoie 1 si la txt module est = à une valeur de la table2
        Next y
        Abs_for = Retour_Abs
     
    End Sub
    Private Sub DateSaisie_Change()
    Dim valeur As Byte
    DateSaisie.MaxLength = 10
    valeur = Len(DateSaisie)
    If valeur = 2 Or valeur = 5 Then DateSaisie = DateSaisie & "/"
    End Sub
     
      Private Sub Nom_Click()
       Dim a()
       a = Me.choix.List
       NbCol = UBound(a, 2) - LBound(a, 2) + 1
       Call tri(a(), LBound(a), UBound(a), NbCol, 0)
       Me.choix.List = a
       Me.tri_Equipe.ForeColor = vbBlack
       Me.Nom.ForeColor = vbRed
       'Me.LCP.ForeColor = vbBlack
    End Sub
     
    Private Sub tri_Equipe_Click()
       Dim a()
       a = Me.choix.List
       NbCol = UBound(a, 2) - LBound(a, 2) + 1
       Call tri(a(), LBound(a), UBound(a), NbCol, 3)
       Me.choix.List = a
       Me.Nom.ForeColor = vbBlack
       Me.tri_Equipe.ForeColor = vbRed
       'Me.LCP.ForeColor = vbBlack
    End Sub
    Sub tri(a(), gauc, droi, NbCol, colTri)        ' Quick sort
     ref = a((gauc + droi) \ 2, colTri)
     g = gauc: d = droi
     Do
         Do While a(g, colTri) < ref: g = g + 1: Loop
         Do While ref < a(d, colTri): d = d - 1: Loop
         If g <= d Then
           For c = 0 To NbCol - 1
             temp = a(g, c): a(g, c) = a(d, c): a(d, c) = temp
           Next
           g = g + 1: d = d - 1
         End If
     Loop While g <= d
     If g < droi Then Call tri(a, g, droi, NbCol, colTri)
     If gauc < d Then Call tri(a, gauc, d, NbCol, colTri)
    End Sub
     
    Private Sub CommandButton1_Click()
    Calendrier.Show
    End Sub
    Est ce qu quelqu'un aurait une idée sur le problème

    en vous remerciant pour votre aide précieuse

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je crois t'avoir déjà répondu dans la section Excel ...

  3. #3
    Membre confirmé
    Homme Profil pro
    chef de service
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : chef de service

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Par défaut re
    Bonsoir,
    je pense que je me suis mal expliqué

    ma combo "temps" est remplie au lancement de l'userform ,par une liste de données situées dans la feuille rens_sdis dans la colonne i5 à i 40, je me suis laissé la possibilité d'augmenter cette liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Durée = Sheets("Rens_sdis")
    Me.Temps.List = Range(Durée.[i5], Durée.[i65000].End(xlUp)).Value ' liste des durées
    Cette liste démarre à 0 ensuite, 0.25, 0.50, 0.75 etc qui sont les valeurs affichées dans la combo temps qui est surligné en jaune sur la photo.

    Une fois la valeur sélectionnée, " par exemple sur la photo 1.25" je valide et ça doit me remplir la colonne O de ma feuille "suivi de formation" avec la valeur 1.25.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("o65536").End(xlUp).Offset(1, 0).Value = Format(Temps, "# ##0,00")
    Il n'y a pas de variable ou de calcul, c'est juste une valeur dans un combo de la liste contenue dans une feuille que je veux renvoyer dans une autre feuille.

    Sauf que la valeur sélectionnée ne correspond pas à la valeur renvoyer.

    Je ne comprends pas pourquoi je sélectionne 1.25 et ça me renvoie 1 et si je veux 1.75 ça me renvoie 2 ??????? la valeur renvoyer est arrondie??? je veux la valeur que j'ai sélectionnée!

    Par contre si dans le code j’enlève (= Format(Temps, "# ##0,00") et que je mets (= Temps) le résultat est bon 1.25 correspond à 1.25 mais en format texte et là c'est mon tableau croisé dynamique qui ne reconnais pas les chiffres.
    Conclusion dans les deux cas c'est la mer...........
    Très simplement je veux que mon chiffre soit renvoyer en format chiffre et pas en texte, mais exact, pas arrondie.

    Si vous avez une idée ça m'aiderai beaucoup.

    En vous remerciant,
    cordialement

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Très simplement je veux que mon chiffre soit renvoyer en format chiffre et pas en texte, mais exact, pas arrondie
    Le "format chiffre" n'existe pas.
    Existent des types : le type string et les types numeriques integer, long, single et double
    Un type numérique n'a pas de "format". On peut en "formater" l'affichage, mais ce formatage en fera à nouveau du texte
    Ta combo contient des valeurs de type string. Leurs valeurs numériques nécessitent une conversion (voir la réponse que je t'ai faite dans ton autre discussion)
    Voilà

  5. #5
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.

    Ce qui cause l'arrondi dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("o65536").End(xlUp).Offset(1, 0).Value = Format(Temps.Value, "# ##0,00")
    c'est la virgule dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Format(Temps.Value, "# ##0,00")
    Le separateur decimal dans Format est toujours un point.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Format(Temps.Value, "# ##0.00")

  6. #6
    Membre confirmé
    Homme Profil pro
    chef de service
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : chef de service

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Par défaut re
    merci pour la réponse
    j'ai finalement réussi en écrivant ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("o65536").End(xlUp).Offset(1, 0).Value = Temps.Value * 1 ' remplissage de la  colonne temps
    Plus d'arrondi et plus de format texte, tout fonctionne super

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Problème de format texte en nombre
    Par mimicor15 dans le forum Excel
    Réponses: 9
    Dernier message: 27/01/2017, 18h25
  2. [XL-2010] supprimer l'espace , convertir le format text en nombre
    Par ghazi.hlioui dans le forum Excel
    Réponses: 1
    Dernier message: 06/03/2014, 14h01
  3. Problème de format d'un nombre
    Par loic69100 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2009, 11h18
  4. problème de format texte
    Par dom_dev dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 14/09/2009, 16h35
  5. passage de format texte vers nombre
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 07/06/2007, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo