Bonjour tout le monde,
je cherche une macro qui lance une alerte ou MSGBOX en cas d'utilisation de caractères spéciaux / \ : * ? " | <> dans une cellule excel
Merci beaucoup de votre aide
Version imprimable
Bonjour tout le monde,
je cherche une macro qui lance une alerte ou MSGBOX en cas d'utilisation de caractères spéciaux / \ : * ? " | <> dans une cellule excel
Merci beaucoup de votre aide
Bonjour, à mettre dans un module standard, la vérification se fait quand une cellule est modifiée et ce dans tout le classeur.
Appel de la macro via l'évènement:Code:
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 Public Sub CheckCaracteresSpeciaux(Target As Range) Dim specialChars As String Dim cell As Range Dim char As String ' Liste des caractères spéciaux à surveiller specialChars = "/\:*?""|<>" ' Vérification seulement pour la cellule modifiée For Each cell In Target ' Vérification seulement pour les cellules non vides If Not IsEmpty(cell.Value) Then ' Boucle à travers chaque caractère de la cellule For i = 1 To Len(cell.Value) char = Mid(cell.Value, i, 1) ' Vérification si le caractère est dans la liste des caractères spéciaux If InStr(specialChars, char) > 0 Then ' Affiche une alerte si un caractère spécial est trouvé MsgBox "Alerte ! Caractère spécial trouvé dans la cellule " & cell.Address & ": " & char ' Met fin à la boucle si un caractère spécial est trouvé Exit For End If Next i End If Next cell End Sub
Code:
1
2
3
4
5 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) CheckCaracteresSpeciaux Target End Sub
merci beaucoup de votre retour , je vais essayer :)
Cela fonctionne très bien
encore merci beaucoup :D
Bonjour,
On peut également créer une fonction renvoyant True ou False. Voir cette discussion sur le même sujet Caractères interdits dans nom de fichier
J'ai juste une question ,j'ai une cellule où la date s'agrémente en automatique et justement ça me bloque avec la macro vu que j'ai des / dedans est il possible d'enlever cette cellule de la macro ???
car pour les reste ça fonctionne très bien
Pour vous expliquez un peu plus notre soucis , nous avons créé une macro;
on ouvre un fichier excel, on rempli une ligne , on clique sur un bouton qui nous ouvre un autre fichier qui prend déjà les informations du premier fichier et donc ce deuxième on le complète et on clique sur un bouton qui enregistre une version excel et une version PDF, nous ouvre un mail avec le PDF dedans , et,de temps en temps on avait des erreurs 1004 dès que l'on appuyait sur ce bouton ,à force de chercher ,on a trouvé que c'était à cause des ces caractères spéciaux que l'on écrivait sur le premier fichier , d'où ma question sur une macro pour que les gens évitent ces caractères spéciaux
Bonjour,
D'où l'intérêt d'utiliser une fonction générique qui peut fonctionner dès l'encodage des données et pourrait être utilisée dans d'autres circonstances comme dans une boucle mais pour ma part, il est préférable de le vérifier au moment où l'on introduit la donnée.
On peut exclure une cellule de la vérification comme ceci:
Code:
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
27
28
29 Public Sub CheckCaracteresSpeciaux(Target As Range) Dim specialChars As String Dim cell As Range Dim char As String ' Liste des caractères spéciaux à surveiller specialChars = "/\:*?""|<>" ' Vérification seulement pour la cellule modifiée For Each cell In Target ' Exclure la vérification si la cellule est A1 (ou toute autre cellule que tu veux exclure) If cell.Address <> "$A$1" Then ' Vérification seulement pour les cellules non vides If Not IsEmpty(cell.Value) Then ' Boucle à travers chaque caractère de la cellule For i = 1 To Len(cell.Value) char = Mid(cell.Value, i, 1) ' Vérification si le caractère est dans la liste des caractères spéciaux If InStr(specialChars, char) > 0 Then ' Affiche une alerte si un caractère spécial est trouvé MsgBox "Alerte ! Caractère spécial trouvé dans la cellule " & cell.Address & ": " & char ' Met fin à la boucle si un caractère spécial est trouvé Exit For End If Next i End If End If Next cell End Sub