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 :

Souci avec une formule par une fonction Selection.validation


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Points : 67
    Points
    67
    Par défaut Souci avec une formule par une fonction Selection.validation
    Bonjour,
    Je galere depuis un petit moment sans vraiment comprendre pourquoi ca ne marche pas.

    Dans une celulle excel, je saisie un texte de ce style la :"CC-XX" sachant que les XX sont un chiffre compris entre 1 et 52

    je voudrais crée ss VBA par la fonction validation une formule qui vérifie mon ecri et l'autorise si c'est bon.
    Mon souci est que je n'arrive pas a faire fonctionner la fonction VAL ou CNUM pour basculer du texte en numerique.

    voici la formule
    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
    With Selection.Validation
            .Delete
            .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:= _
            "=AND(LEFT(A5,3)=""CC-"",OR(AND(LEN(A5)=4,AND(VAL(MID(A5,4,3))<10,val(MID(A5,4,3))>0)),AND(val(MID(A5,4,3)>9,val(MID(A5,4,3)<53)))"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = "Format CC-X ou CC-XX"
            .ErrorTitle = ""
            .InputMessage = " "
            .ErrorMessage = ""
            .ShowInput = False
            .ShowError = True
        End With
    Il n'aime pas la fonction VAL, j'ai viré les vals, et fait une analyse par alphanumérique, forcmeent ca marche pas (mais la fonction ne plante plus)

    Comment peux ton basculer du string en Val sous la fonction de validation ?
    Merci a vous.
    T

  2. #2
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    Bonjour
    je suis pas sur du tout mais si tu utilises VALUE à la place de VAL?
    Slts

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    et si tu supprimais tout simplement "Val" en principe excel traduit directement en numérique.
    Pas tester..

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    normalement c'est CNUM qui devrais t'aller puisque val est une foction vba et pas excel

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    Citation Envoyé par alsimbad
    normalement c'est CNUM qui devrais t'aller puisque val est une foction vba et pas excel
    je reviens
    en fait tu utilises des formule vba, c'est normal que ça marche pas
    pourquoi ne pas tester direstement en vba, en faire une fonction par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function formulalac()
    resultadeslettre = Left(Range("a5"), 3)
    If Not resultatdeslettre = "CC-" Then
      If tesautresconditions Then ...
    ça serait plus simple
    a plus

  6. #6
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par alsimbad
    normalement c'est CNUM qui devrais t'aller puisque val est une foction vba et pas excel
    D'accord avec toi, mais il faut les mettre en anglais quand on les rentre par VBA donc VALUE
    Slts

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    Citation Envoyé par Plateforme3
    D'accord avec toi, mais il faut les mettre en anglais quand on les rentre par VBA donc VALUE
    Slts
    et aussi
    Citation Envoyé par plateforme3
    Bonjour
    je suis pas sur du tout mais si tu utilises VALUE à la place de VAL?
    Slts
    plateforme, es tu sur d'avoir saisie la difference entre val et value
    je te rappelle la formulation quand tu appuie sur F1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <H1>Val, fonction
     
     
    Renvoie le nombre contenu dans une chaîne de caractère sous la forme d'une valeur numérique d'un type approprié.
    </H1>


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    value
    <a href="mk:@MSITStore:C:\Program%20Files\Microsoft%20Office\Office10\1036\VBAXL10.CHM::/html/xlprovalue.htm#" target="_blank">Propriété Value telle qu'elle s'applique à l'objet Range.</a><a href="mk:@MSITStore:C:\Program%20Files\Microsoft%20Office\Office10\1036\VBAXL10.CHM::/html/xlprovalue.htm#" target="_blank">
    Cette propriété renvoie ou définit la valeur de la plage spécifiée. Type de données Variant en lecture-écriture.
    expression.Value(RangeValueDataType)
     
    expression Obligatoire. Expression qui renvoie un objet Range.
    </a>
    ou alors je sais pas de quoi tu parles



  8. #8
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    Bonjour
    Je m'appuyais simplement sur le fait qu'en enregistrant une macro du type: =Cnum(cellule), le code dans VBA te donne =Value(cellule)
    Ou c'est mon Excel qui plantoie... rires
    Slts

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    oups escuse camarade
    effectivement, on peut se tromper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ActiveCell.FormulaR1C1 = "=VALUE(""CC-22"")"
    mais bon, ça marche pas non plus pour le pb de mennix

  10. #10
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    Bonjour
    J'ai compté, il y a incohérence dans le nombre de parenthèses ouvertes et fermées, ça va pas aider
    Ensuite, en retapant la formule, Excel me dit qu'il y a trop d'arguments, mais est ce du simplement aux parenthèses?
    Slts

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonsoir

    Tu peux essayer cette adaptation


    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
    'Equivalent de la formule:
    '=SI(ESTERREUR(ET(GAUCHE(A5;3)="CC-";CNUM(STXT(A5;4;NBCAR(A5)-3))<53;
    'CNUM(STXT(A5;4;NBCAR(A5)-3))>0;NBCAR(A5)<6));FAUX;ET(GAUCHE(A5;3)="CC-";
    'CNUM(STXT(A5;4;NBCAR(A5)-3))<53;CNUM(STXT(A5;4;NBCAR(A5)-3))>0;NBCAR(A5)<6))
     
    With Range("A5").Validation
        .Delete
        .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:= _
            "=IF(ISERROR(AND(LEFT(A5,3)=""CC-"",VALUE(MID(A5,4,LEN(A5)-3))<53," & _
            "VALUE(MID(A5,4,LEN(A5)-3))>0,LEN(A5)<6)),FALSE,AND(LEFT(A5,3)=""CC-"",VALUE" & _
            "(MID(A5,4,LEN(A5)-3))<53,VALUE(MID(A5,4,LEN(A5)-3))>0,LEN(A5)<6))"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "Format CC-X ou CC-XX"
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = "Erreur de format "
        .ShowInput = False
        .ShowError = True
    End With


    michel

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Points : 67
    Points
    67
    Par défaut
    Hello a tous
    merci déjà a vous tous... visiblement Value ne fonctionne pas ds mon algo d'origine, quand je le rajoute ,j'ai un crash

    en reprenant exemple sur SilkyRoad,j'ai reecris legerement l'algo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:= _
    "OR(AND(LEFT(A6,3)=""CC-"",VALUE(MID(A6,4,2))<53,VALUE(MID(A6,4,3))>9,LEN(A6)=5)," & _
                "AND(LEFT(A6,3)=""CC-"",VALUE(MID(A6,4,2))<10,VALUE(MID(A6,4,3))>0,LEN(A6)=4))"
    Avec ca, c'est du tout bon... ca marche nickel..
    merci encore

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

Discussions similaires

  1. [XL-2003] mettre une formule dans une cellule par macro
    Par jauffray.delteil dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/11/2021, 14h54
  2. [Toutes versions] Imbriquer une formule dans une formule à l'aide de l'outil Insertion de fonction
    Par Philippe Tulliez dans le forum Contribuez
    Réponses: 0
    Dernier message: 27/08/2014, 11h21
  3. Réponses: 47
    Dernier message: 23/12/2012, 18h47
  4. Réponses: 4
    Dernier message: 21/07/2011, 08h04
  5. Inscrire une formule dans une cellule par VBA
    Par marc56 dans le forum Excel
    Réponses: 6
    Dernier message: 23/11/2008, 23h57

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