Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
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,
 

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 à 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.

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
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 )

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

Gégé-45550

XLDnaute Accro
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 !
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…