Bonjour à tous,
Ce que je souhaite faire:
Appliquer une validation de données dans une colonne de table (Tab_CSV) fraichement ajoutée par l'utilisateur.
Format accepté: nombre/nombre ou */nombre
ex: 1/2 ou 1/2154 ou 5454/11 ou */5 ou */21
La fonction wColNm transforme un numéros de colonne en lettre de colonne.
snewColAddress contient l'adresse de la première ligne de la nouvelle colonne de ma table (ex: $G11 => je récupère sous ce format de façon à ce que la validation soit faite sur toute la colonne de la table).
Ce qui plante:
La ligne rouge dans la formule ligne 17 provoque l'erreur 1004 (inutile de lire tout le code que j'ai posté)
Je ne comprends pas pourquoi... sachant que tout le reste de la formule marche...
Voici les 3 blocs de codes dans la formule complète:
==> vérifie la présence du /
Code : Sélectionner tout - Visualiser dans une fenêtre à part ISNUMBER(SEARCH(""/"", " & snewColAddress & "))
==> vérifie qu'on a soit un nombre soit un * à gauche du /
Code : Sélectionner tout - Visualiser dans une fenêtre à part OR(ISNUMBER(1*MID(" & snewColAddress & ",1,1*(SEARCH(""/""," & snewColAddress & ")-1))), CODE(1*MID(" & snewColAddress & ",1,1*(SEARCH(""/""," & snewColAddress & ")-1)))=42)
==> vérifie qu'on a un nombre à droite du /
Code : Sélectionner tout - Visualiser dans une fenêtre à part ISNUMBER(1*MID(" & snewColAddress & ",1*(SEARCH(""/""," & snewColAddress & ")+1),LEN(" & snewColAddress & ")))
Je fais donc un:
ET(CODE1, CODE2, CODE3)
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 If gnCols_1 < nCols Then Usfrm_CalibSelection.Show snewColName = gTypeCalib & "/" & 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 = "@" With .Validation .Delete .Add _ Type:=xlValidateCustom, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, _ Formula1:="=IF(AND(ISNUMBER(SEARCH(""/"", " & snewColAddress & ")), OR(ISNUMBER(1*MID(" & snewColAddress & ",1,1*(SEARCH(""/""," & snewColAddress & ")-1))), CODE(1*MID(" & snewColAddress & ",1,1*(SEARCH(""/""," & snewColAddress & ")-1)))=42 ) , ISNUMBER(1*MID(" & snewColAddress & ",1*(SEARCH(""/""," & snewColAddress & ")+1),LEN(" & snewColAddress & "))) ),true,false)" End With End With End If
Partager