Bonjour à tous,

Ce que je veux faire:

Je dois entrer en VBA une formule de validation des données dans une nouvelle colonne d'une Table (validation active sur toutes les cellules de la nouvelle colonne).
Donc lorsque l'utilisateur rentre une valeur dans une cellule de cette nouvelle colonne de cette table, cela vérifira le forma suivant:
Format accepté: nombre/0 ou nombre/1 ou */0 ou */1 et les nombres peuvent être des chiffres à virgule (125454.12) avec un point comme séparateur... là aussi je n'ai pas trouvé comment faire...
ex: 5454/0 ou 12/1 ou */0

Je veux rentrer cette formule de validation en VBA dans le code, sans passer par la validation des données d'Excel (la colonne étant ajoutée dynamiquement par l'utilisateur).

Ci-dessous la colonne "param_eceu/Cxx1_gear_rat_tgt" ajoutée avec sa validation des données (j'essaye de rentrer une valeur non permise)
Pièce jointe 433714

************************************************************************************
Concentrons-nous durant cette étude sur la détection du zéro à la fin, après le /


Voici mon soucis:

Ce code marche:
On vérifie ci-dessous la présence du "/" dans les données saisies (voir la ligne Formula1).
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
 
' Ajout d'une colonne de calibration
        If gnCols_1 < ncols Then
             Usfrm_CalibSelection.Show
             snewColName = gNameCalib
             Rheader(Target.Column - Rcsv.Column + 1) = snewColName
             Set RnewCol = Tab_CSV.ListColumns(snewColName).DataBodyRange
             ' On récupère l'addresse en format type $H11 par exemple (si les données de la nouvelles colonne commencent en H11).
             ' Il y a un $ devant le H mais pas devant le 11, de manière à ce que la validation soit récursive sur toute la colonne du tableau
             snewColAddress = "$" & wColNm(RnewCol.Column) & RnewCol.Row
             With RnewCol
                .NumberFormat = "@" ' On met au format texte sinon le format 4/3 sera pris comme une date
                ' Le format accepté sera:
                ' - nombre/nombre ou
                ' - */nombre
                With .Validation
                  .Delete
                  .Add _
                       Type:=xlValidateCustom, _
                       AlertStyle:=xlValidAlertStop, _
                       Operator:=xlBetween, _
                       Formula1:="=IF(ISNUMBER(SEARCH(""/"",  " & snewColAddress & ")) ,true,false)" ' cette formule marche !!!
 
                End With
             End With
        End If


Cette formule marche:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
        Formula1:="=IF(RIGHT(" & snewColAddress & ", 2)=""0"" ,true,false)"
Cette formule ne marche pas, apparemment c'est le Search dans la formule qui sème la pagaille, alors qu'il marche dans le premier exemple..... :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
        Formula1:="=IF(RIGHT(" & snewColAddress & ", SEARCH(""/"",  " & snewColAddress & "))=""0"" ,true,false)"
Ne marche pas (erreur 1004):
C'est pourtant ce que je souhaite faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
 
                       Formula1:="=IF(RIGHT(" & snewColAddress & ", LEN(" & snewColAddress & ")-SEARCH(""/""," & snewColAddress & "))=""0"" ,true,false)"

Pourquoi ?