Excel: "Validation des données" en Vba

fanch55

XLDnaute Barbatruc
Bonjour à tous,

Je suis resté près d'une demi-journée à me demander pourquoi en tentant de faire un range.validation.add, je me heurtais systématiquement à une erreur 1004 . 😖
Pourtant, le code que j'exécutais avait été construit par l'enregistreur de macro , et ce code aboutissait également à une erreur 1004 .🥳
VB:
Exemple:
        .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
            Formula1:="=ET(SOMME($B4:$D4)<=$B$2;OU(B4="""";ESTNUM(B4));MOD(B4;0.5)=0)"
Après moult consultations de différents forums, j'ai remarqué que les utilisateurs anglophones avaient rarement ce type d'erreur .
J'ai donc tenté de "traduire" la formule : 🥵
VB:
        .Add xlValidateCustom, xlValidAlertStop, xlBetween, _
            "=AND(SUM($B4:$D4)<=$B$2;OR(B4="""";ISNUMBER(B4));MOD(B4;0.5)=0)"
code qui provoquait toujours une erreur 1004 ...😖
puis je me suis souvenu qu'en Excel Anglophone, le caractère ";" n'était pas le délimiteur standard, mais le caractère "," (virgule)🤔
VB:
    With Range("B4").Validation
        .Add xlValidateCustom, xlValidAlertStop, xlBetween, _
            "=AND(SUM($B4:$D4)<=$B$2,OR(B4="""",ISNUMBER(B4)),MOD(B4,0.5)=0)"
        .IgnoreBlank = True: .InCellDropdown = True
        .InputTitle = "": .InputMessage = "": .ShowInput = True
        .ErrorTitle = "": .ErrorMessage = "": .ShowError = True
    End With

Code qui à ma plus grande satisfaction se déroule correctement .... 😁

Que de temps perdu pour une particularité non indiquée dans les aides de Microsoft !!!! 😩
 

Gégé-45550

XLDnaute Accro
Bonjour à tous,

Je suis resté près d'une demi-journée à me demander pourquoi en tentant de faire un range.validation.add, je me heurtais systématiquement à une erreur 1004 . 😖
Pourtant, le code que j'exécutais avait été construit par l'enregistreur de macro , et ce code aboutissait également à une erreur 1004 .🥳
VB:
Exemple:
        .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
            Formula1:="=ET(SOMME($B4:$D4)<=$B$2;OU(B4="""";ESTNUM(B4));MOD(B4;0.5)=0)"
Après moult consultations de différents forums, j'ai remarqué que les utilisateurs anglophones avaient rarement ce type d'erreur .
J'ai donc tenté de "traduire" la formule : 🥵
VB:
        .Add xlValidateCustom, xlValidAlertStop, xlBetween, _
            "=AND(SUM($B4:$D4)<=$B$2;OR(B4="""";ISNUMBER(B4));MOD(B4;0.5)=0)"
code qui provoquait toujours une erreur 1004 ...😖
puis je me suis souvenu qu'en Excel Anglophone, le caractère ";" n'était pas le délimiteur standard, mais le caractère "," (virgule)🤔
VB:
    With Range("B4").Validation
        .Add xlValidateCustom, xlValidAlertStop, xlBetween, _
            "=AND(SUM($B4:$D4)<=$B$2,OR(B4="""",ISNUMBER(B4)),MOD(B4,0.5)=0)"
        .IgnoreBlank = True: .InCellDropdown = True
        .InputTitle = "": .InputMessage = "": .ShowInput = True
        .ErrorTitle = "": .ErrorMessage = "": .ShowError = True
    End With

Code qui à ma plus grande satisfaction se déroule correctement .... 😁

Que de temps perdu pour une particularité non indiquée dans les aides de Microsoft !!!! 😩
Bonsoir,
avez-vous testé le résultat obtenu en remplaçant Formula1 par FormulaLocal et en conservant le code en français ?
VB:
With Range("B4").Validation
        .Add xlValidateCustom, xlValidAlertStop, xlBetween, _
        FormulaLocal:="=ET(SOMME($B4:$D4)<=$B$2;OU(B4="""";ESTNUM(B4));MOD(B4;0.5)=0)"
        .IgnoreBlank = True: .InCellDropdown = True
        .InputTitle = "": .InputMessage = "": .ShowInput = True
        .ErrorTitle = "": .ErrorMessage = "": .ShowError = True
    End With
Cordialement,
 

fanch55

XLDnaute Barbatruc
avez-vous testé le résultat obtenu en remplaçant Formula1 par FormulaLocal et en conservant le code en français ?
Salut @Gégé-45550 , malheureusement ce n'est pas une option possible comme pour une cellule ...
Mais merci de ta suggestion .
1680767868754.png

1680767912990.png
 

cp4

XLDnaute Barbatruc
Bonjour @fanch55 , @Gégé-45550 ,

@fanch55 : VBE est en Anglais, personnellement je lance l'enregistreur de macro, la formule est au préalable saisie dans une cellule en Français,
je sélectionne la cellule, puis sélectionne le texte de la formule dans la barre de formule,
je fais un Ctrl+C et Entrée.
J'arrête l'enregistreur, cela me donne la formule en Anglais à utiliser dans mon code VBA.

Bonne journée.
 

Gégé-45550

XLDnaute Accro
Bonjour @fanch55 , @Gégé-45550 ,

@fanch55 : VBE est en Anglais, personnellement je lance l'enregistreur de macro, la formule est au préalable saisie dans une cellule en Français,
je sélectionne la cellule, puis sélectionne le texte de la formule dans la barre de formule,
je fais un Ctrl+C et Entrée.
J'arrête l'enregistreur, cela me donne la formule en Anglais à utiliser dans mon code VBA.

Bonne journée.
Bonjour à tous,
moi, j'utilise l'option de menu "Traducteur" pour le même résultat, mais je ne sais plus si cette option est dispo dans toutes les versions d'Excel.
Capture.jpg

Bonne journée à tous
 

fanch55

XLDnaute Barbatruc
Ok, vu : complément à installer .
Mais l'enregistreur de macro le fait toujours en Français .
Ne pas oublier de prendre la formule française et la traduire via le translator .
C'est fastidieux mais cela existe ..
Merci à tous .
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Moi pour traduire une formule vers de l'english, j'utilise cette macro :
VB:
Sub MaFormule()
    Debug.Print ActiveCell.Formula
End Sub

Bon, après avoir récupéré la formule dans la fenêtre de debug, il faut penser à doubler les guillemets... ;)
 

TooFatBoy

XLDnaute Barbatruc
Merci Gégé, j'avais bien vu qu'avec ta proposition il fallait installer un truc en plus dans Excel, d'où ma proposition d'une simple ligne de code VBA qui me semble beaucoup plus simple.

Et puisqu'on a le choix entre trois solutions données ici, maintenant 🎶 chacun fait c'qui lui plait plait plait 🎶


Bonne nuit l'ami, fais de beaux rêves ! ;)
 

Gégé-45550

XLDnaute Accro
Merci Gégé, j'avais bien vu qu'avec ta proposition il fallait installer un truc en plus dans Excel, d'où ma proposition d'une simple ligne de code VBA qui me semble beaucoup plus simple.

Et puisqu'on a le choix entre trois solutions données ici, maintenant 🎶 chacun fait c'qui lui plait plait plait 🎶


Bonne nuit l'ami, fais de beaux rêves ! ;)
Bonne nuit l'ami
 

fanch55

XLDnaute Barbatruc
Un petit bémol à ce traducteur :
Toutes les fonctions ne sont pas traduites .
Il ne supporte pas la notation de table structurée dans les arguments d'une fonction .
Il ne me semble pas "fini" .... ( voir le message ci-dessous )
1685360943484.png

Le lien pour envoyer des commentaires ne fonctionne pas ou plus :
1685361224476.png
 

Gégé-45550

XLDnaute Accro
Un petit bémol à ce traducteur :
Toutes les fonctions ne sont pas traduites .
Il ne supporte pas la notation de table structurée dans les arguments d'une fonction .
Il ne me semble pas "fini" .... ( voir le message ci-dessous )
Regarde la pièce jointe 1171111
Le lien pour envoyer des commentaires ne fonctionne pas ou plus :
Regarde la pièce jointe 1171112
Pas faux ... mais c'est une lacune apparemment unilatérale : essaye de traduire "=HYPERLINK(A6,"b")" de l'anglais vers le français et tu verras que ça marche.
Bizarre ... mais pas étonnant venant des anglo-saxons !
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 814
dernier inscrit
JLGalley