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 de nombre à virgule dans une liste de validation [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Points : 164
    Points
    164
    Par défaut Problème de format de nombre à virgule dans une liste de validation
    Bonjour

    J'ai un document Excel qui gère des listes de validation dynamique et ce grace à un petit code VBA.

    Tout marche bien, sauf quand les listes de validation sont des nombres à virgule.

    En effet, la propriété Formula1 ne comprend pas le format "Français" des nombres (qui est celui qui est pris si je tape à la main) et demande donc le format "Anglais".

    Dans l'absolu, cela fonctionne bien. J'ai en final dans ma liste de validation les bons chiffres mais comme les , sont des ., Excel ne les reconnait pas comme chiffre et sa plante mes calculs.

    Je m'explique :

    En mode manuel, ma liste de validation serait : 1 ; 1,5 ; 1,6

    Dans le code VBA, je dois mettre : 1 , 1.5 , 1.6

    Mais la valeur 1.6 n'est pas un chiffre pour Excel.

    Je suis donc complètement planté. Existe t'il un moyen dans Excel pour qu'il prenne en charge correctement les valeurs de validation?
    Connaissez vous une astuce pour transformer le 1.6 au format Français.

    D'avance merci de votre aide. Mon outil doit être en prod lundi et je suis complètement planté.

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Comme déjà demandé dans ton post dans le forum Excel, où est donc le code ?!

    Car il n'y a aucun souci avec les points vu que le VBA ne comprend que le point comme séparateur décimal ‼
    C'est pourtant clair par la consultation de l'aide intégrée …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre habitué
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Points : 164
    Points
    164
    Par défaut
    Bonjour Marc-L

    Le code n'apporte rien mais je le met ci-dessous :
    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
     
    Public Function GET_NCQ_UO(Wprefixe As String, Wlot As String, WType As String) As String
        Dim Longlet As String
        Dim LligneLien As Integer           ' Ligne du libellé entier
        Dim LvaleurComp As String           ' Chaine du libellé en entier
     
        ' Si on cherche à mettre une valeur
        If WType <> "" Then
        ' Récupération du nom de l'onglet des libellés
            Longlet = getOngletCout(Wlot)
     
        ' On recherche dans l'onglet libelle
            LligneLien = TrouverDansColonne(Longlet, ActiveWorkbook.Sheets("conf").[CONF_UO_COURT].Value, Wprefixe)
     
        ' On récupère le libellé en entier
        ' On aurait pu faire plus dynamique mais j'ai la flem :(
            Select Case WType
                Case "N":
                    LvaleurComp = Sheets(Longlet).Cells(LligneLien, ActiveWorkbook.Sheets("conf").[CONF_UO_N].Value).Value2
                Case "C":
                    LvaleurComp = Sheets(Longlet).Cells(LligneLien, ActiveWorkbook.Sheets("conf").[CONF_UO_C].Value).Value2
                Case "Q":
                    LvaleurComp = Sheets(Longlet).Cells(LligneLien, ActiveWorkbook.Sheets("conf").[CONF_UO_Q].Value).Value2
            End Select
        Else
            LvaleurComp = ""
        End If
     
            ' Si on a pas de valeur
     
        If LvaleurComp = "" Then
            Lval = ""
            With Selection.Validation
            .Delete
            End With
        Else
            Lval = Replace(Replace(Trim(LvaleurComp), ",", "."), ";", ",")
        ' On enleve les blancs au cas où
        ' et on passe au format américian : , => . et ; => , sinon ce n'est pas compris comme liste de validation
            With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=Lval
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = "Vous devez saisir une valeur de l'inducteur autorisée sinon laisser vide"
            .ShowInput = True
            .ShowError = True
           End With
         End If
     
         ' on retourne qqch pour le fun
     
        GET_NCQ_UO = Lval
    End Function
    Donc maintenant, j'ai une belle liste de validation qui n'accepte que les nombres en X.Y et non X,Y

    Mon problème reste entier.

    A+

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Se conformer aux règles du forum peut apporter plus de réponse car sinon, certains zappent ! …

    Du coup on ne voit pas ce qu'il y a dans la variable, certainement la source de l'erreur !

    En remplaçant par Formula1:="1,1.5,1.6" c'est bon ou pas ?

    Sinon je laisse ceux disposant d'une version 2007 française répondre …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Membre habitué
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Points : 164
    Points
    164
    Par défaut
    Ce que j'essaye de dire depuis le début, c'est que Formula1:="1,1.5,1.6" c'est bon pour que l'affichage fonctionne en tant que liste de validation mais pas en tant que nombre au format français ensuite dans la celulle qui reçoit l'information.

    Et oui, je pense qu'une version en Français doit permettre de mieux comprendre mon souci.

    a+

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    J'ai reproduit le souci en utilisant une variable intermédiaire comme dans ton code …

    Solutions viables :

    • liste en dur : Formula1:="1,1.5,1.6", cela fonctionne bien de mon côté directement sans variable …

    • liste via plage de cellules :

    - si dans la même feuille : Formula1:="=$A$1:$A$3"

    - si dans une autre feuille du classeur, via une plage de cellules nommée : Formula1:="=LISTEVAL"


    Sans voir de code donc, aucune aide n'aurait été possible !
    De toute manière, une discussion doit être claire & exhaustive et accompagnée d'un code pour y répondre …

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Membre habitué
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Points : 164
    Points
    164
    Par défaut
    Marc-L

    Je te remercie pour ton aide et ton implication.
    Je ne peux pas avoir de plage, ni de celulles nommées car je gère de nombreuses listes dynamiques.

    Seule la solution, que tu appelles "en dur" est possible. Ma variable reproduit uniquement la liste que tu as mise.

    Donc, si je fais cette première solution : J'ai dans ma liste déroulante (dans ma feuille excel)
    1
    1.5
    1.6

    et moi, je veux (pour respecter les nombres français)
    1
    1,5
    1,6

    Je pense qu'il n'y a pas de solution. J'ai donc fait une ptte fonction qui modifie dans mes formules de calcul 1.5 en 1,5 (par ex). C'est pas beau mais je ne vois pas comment faire.

    Je crois que dans ce cas (et c'est vrai aussi pour les dates) qu'il y a une non prise en compte des informations locales depuis le code VBA.

    A+

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    De mon côté, les trois solutions fonctionnent !
    Je laisse d'autres intervenants tester et apporter leurs points de vue …

    Et je n'ai jamais eu non plus de souci avec les dates même en 2007,
    il faut juste être carré avec les types de données …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/05/2014, 14h38
  2. [XL-2003] Problème de format de cellules imposés dans une procédure évènementielle
    Par Joloma dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/02/2011, 18h41
  3. Réponses: 2
    Dernier message: 14/11/2008, 18h31
  4. problème de zero apres la virgule dans une table
    Par mosca_coroneja dans le forum Outils
    Réponses: 11
    Dernier message: 08/04/2006, 21h57
  5. [FLASH MX] Choisir un nombre aléatoire dans une liste
    Par grenatdu55 dans le forum Flash
    Réponses: 4
    Dernier message: 23/04/2005, 21h09

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