EXCEL - validation de données
Résolu
Croquette
-
Croquette -
Croquette -
Bonjour à tous,
je voudrais faire en sorte que dans ma cellule A4, l'utilisateur du fichier ne puisse entrer qu'un texte avec les formats suivant (les "X" correspondant à des chiffres ou des lettres quelconques):
X.X.X.X.
ou
X.X.X
ou
XX.X.
ou
XX.XX.X.
ou
X.X.
ou
XX.X.X.X.
ou
X.XX.
ou
XX.X.XX.
ou
X.X.XX.
Quelqu'un aurait il une solution? une macro? une astuce intelligente?
merci bcp
je voudrais faire en sorte que dans ma cellule A4, l'utilisateur du fichier ne puisse entrer qu'un texte avec les formats suivant (les "X" correspondant à des chiffres ou des lettres quelconques):
X.X.X.X.
ou
X.X.X
ou
XX.X.
ou
XX.XX.X.
ou
X.X.
ou
XX.X.X.X.
ou
X.XX.
ou
XX.X.XX.
ou
X.X.XX.
Quelqu'un aurait il une solution? une macro? une astuce intelligente?
merci bcp
A voir également:
- EXCEL - validation de données
- Ethernet n'a pas de configuration ip valide - Guide
- Excel validation des données liste - Guide
- Trier des données excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
8 réponses
Salut,
Je planche sur ton problème...
Dur dur!
Ma question va te paraitre stupide, mais pourquoi est ce important (au vu des différents formats que tu souhaites laisser à l'utilisateur)?
citation :
les "X" correspondant à des chiffres ou des lettres quelconques la "casse" étant importante, peux t'il y avoir des majuscules et minuscules mélangées? des chiffres et des lettres?
Je planche sur ton problème...
Dur dur!
Ma question va te paraitre stupide, mais pourquoi est ce important (au vu des différents formats que tu souhaites laisser à l'utilisateur)?
citation :
les "X" correspondant à des chiffres ou des lettres quelconques la "casse" étant importante, peux t'il y avoir des majuscules et minuscules mélangées? des chiffres et des lettres?
Je t'ai "bricolé" ce code. Il s'agit plus d'une usine à gaz pas tout à fait efficace plutôt qu'un vrai code... En fait, il repère l'emplacement des points et compare grâce à ces emplacements. En gros, si tu mets 7 points dans ta cellule (ou 4 ou 9) ce code ne décèlera aucun souci. De même si tu y inscris : A...A0.
Je te le donne quand même car c'est tout ce que j'ai trouvé pour t'aider. On ne sait jamais.
Alors pour l'utiliser ouvre ton classeur, tape ALT +F11.
Dans la petite fenêtre en haut à gauche double clique sur Feuil1 (nomdetafeuille1).
En haut de la grande fenêtre visual Basic centrale, tu as deux menus déroulants. Dans celui de gauche choisit "WorkSheet" dans celui de droite choisit "change". Tu obtient ces deux lignes :
Entre ces deux lignes copie et colle le code suivant :
Ferme la fenêtre Visual Basic et teste...
Je te le donne quand même car c'est tout ce que j'ai trouvé pour t'aider. On ne sait jamais.
Alors pour l'utiliser ouvre ton classeur, tape ALT +F11.
Dans la petite fenêtre en haut à gauche double clique sur Feuil1 (nomdetafeuille1).
En haut de la grande fenêtre visual Basic centrale, tu as deux menus déroulants. Dans celui de gauche choisit "WorkSheet" dans celui de droite choisit "change". Tu obtient ces deux lignes :
Private Sub Worksheet_Change(ByVal Target As Range) End Sub
Entre ces deux lignes copie et colle le code suivant :
If Target.Address = "$A$4" And Target.Count = 1 Then If IsEmpty(Target) Then Exit Sub Else If Len(Range("A4")) = 4 Then If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4").ClearContents Range("A4").Select End If End If If Len(Range("A4")) = 5 Then If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 5, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4").ClearContents Range("A4").Select End If End If If Len(Range("A4")) = 7 Then If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." And Mid(Range("A4"), 7, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4").ClearContents Range("A4").Select End If End If If Len(Range("A4")) = 8 Then If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." And Mid(Range("A4"), 6, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 6, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4").ClearContents Range("A4").Select End If End If If Len(Range("A4")) = 9 Then If Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." And Mid(Range("A4"), 7, 1) = "." And Mid(Range("A4"), 9, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4").ClearContents Range("A4").Select End If End If If Len(Range("A4")) <> 9 And Len(Range("A4")) <> 8 And Len(Range("A4")) <> 7 And Len(Range("A4")) <> 5 And Len(Range("A4")) <> 4 Then MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4").ClearContents Range("A4").Select End If End If End If
Ferme la fenêtre Visual Basic et teste...
Non. La fusion n'affecte pas dans ce cas l'adresse de la cellule. Peux tu joindre ici même une copie de ton classeur sans données confidentielles en utilisant un service de pièces jointes comme cjoint : https://www.cjoint.com/
ou cijoint : http://www.cijoint.fr/
ou cijoint : http://www.cijoint.fr/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Essaye ceci :
J'ai ajouté : Application.EnableEvents = True qui autorise le déclenchement d'un évenement et changé les Range("A4").ClearContents qui ne fonctionnent pas avec les cellules fusionnées...
J'ai ajouté : Application.EnableEvents = True qui autorise le déclenchement d'un évenement et changé les Range("A4").ClearContents qui ne fonctionnent pas avec les cellules fusionnées...
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = True If Target.Address = "$A$4" And Target.Count = 1 Then If IsEmpty(Target) Then Exit Sub Else If Len(Range("A4")) = 4 Then If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If If Len(Range("A4")) = 5 Then If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 5, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If If Len(Range("A4")) = 7 Then If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." And Mid(Range("A4"), 7, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If If Len(Range("A4")) = 8 Then If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." And Mid(Range("A4"), 6, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 6, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If If Len(Range("A4")) = 9 Then If Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." And Mid(Range("A4"), 7, 1) = "." And Mid(Range("A4"), 9, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If If Len(Range("A4")) <> 9 And Len(Range("A4")) <> 8 And Len(Range("A4")) <> 7 And Len(Range("A4")) <> 5 And Len(Range("A4")) <> 4 Then MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#" & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If End If End Sub
tant mieux ça fait plaisir ;-)
Bonne année à toi aussi
Bonne année à toi aussi
Bonjour,
Voici le code complet avec, en gras, les lignes modifiées :
Voici le code complet avec, en gras, les lignes modifiées :
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = True If Target.Address = "$A$4" And Target.Count = 1 Then If IsEmpty(Target) Then Exit Sub Else If Len(Range("A4")) = 4 Then If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If If Len(Range("A4")) = 5 Then ' If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." Then -->ligne à supprimer 'Exit Sub ----> ligne à supprimer If Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." Then ' sur cette ligne le 1er mot est à changer, if au lieu de elseif Exit Sub ElseIf Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 5, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If If Len(Range("A4")) = 6 Then 'ajouter tout ce paragraphe If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." And Mid(Range("A4"), 6, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If If Len(Range("A4")) = 7 Then If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." And Mid(Range("A4"), 7, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If If Len(Range("A4")) = 8 Then If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." And Mid(Range("A4"), 6, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 6, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If If Len(Range("A4")) = 9 Then If Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." And Mid(Range("A4"), 7, 1) = "." And Mid(Range("A4"), 9, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If If Len(Range("A4")) <> 9 And Len(Range("A4")) <> 8 And Len(Range("A4")) <> 7 And Len(Range("A4")) <> 5 And Len(Range("A4")) <> 4 Then MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If End If End Sub
A bientôt alors.
Bonne journée à toi
Bonne journée à toi
Salut Croquette!
Non tu n'es pas bête, j'aurais du t'expliquer pour que tu puisses modifier le code à ta guise. J'ai tout refait ce matin (rassures toi, ça ne m'a pris que 5 minutes), en tenant compte :
- du fait que tu préfères les "case" (j'ai cru comprendre ça sur un autre sujet)
- de mon erreur en annotant ma procédure.
Donc lit bien dans le code ce qui apparaitra en vert dans Visual Basic. Les phrases commençant par ' sont des commentaires et n'influent en rien le comportement de la procédure.
Alors ce code :
Si tu as un souci n'hésite pas à revenir.
Non tu n'es pas bête, j'aurais du t'expliquer pour que tu puisses modifier le code à ta guise. J'ai tout refait ce matin (rassures toi, ça ne m'a pris que 5 minutes), en tenant compte :
- du fait que tu préfères les "case" (j'ai cru comprendre ça sur un autre sujet)
- de mon erreur en annotant ma procédure.
Donc lit bien dans le code ce qui apparaitra en vert dans Visual Basic. Les phrases commençant par ' sont des commentaires et n'influent en rien le comportement de la procédure.
Alors ce code :
Private Sub Worksheet_Change(ByVal Target As Range) 'autorise le déclenchement d'un évenement Application.EnableEvents = True 'Si la cellule A4 est sélectionnée et qu'une seule cellule est sélectionnée If Target.Address = "$A$4" And Target.Count = 1 Then 'Si A4 est vide alors on quitte la procédure If IsEmpty(Target) Then Exit Sub 'sinon Else 'on étudie les cas selon le nombre de caractères contenus dans A4 Select Case Len(Range("A4")) 'cas ou A4 contient 4 caractères (ex : X.X.) Case 4 'petit point de syntaxe : 'Mid(Range("A4"), 2, 1) 'Range("A4") correspond à la chaîne de caractères à "analyser" '2 est la position du caractère qui marque le début de la partie à extraire 'et 1 correspond au nombre de caractères à renvoyer. Ce qui nous donne : 'Si en 2ème position on trouve un point et en 4ème un point également alors If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." Then 'c est bon donc on sort de la procédure Exit Sub 'sinon Else 'affiche le message MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") '"vide" A4 Range("A4") = "" 'sélectionne A4 Range("A4").Select End If Case 5 'ici on notera qu'il y a deux possibilités selon la place des points (XX.X. ou X.XX.) 'd'où l'utilisation de ElseIf (sinon si) If Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 5, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If Case 6 If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." And Mid(Range("A4"), 6, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If Case 7 If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." And Mid(Range("A4"), 7, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." And Mid(Range("A4"), 7, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If Case 8 If Mid(Range("A4"), 2, 1) = "." And Mid(Range("A4"), 4, 1) = "." And Mid(Range("A4"), 6, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 6, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub ElseIf Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." And Mid(Range("A4"), 8, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If Case 9 If Mid(Range("A4"), 3, 1) = "." And Mid(Range("A4"), 5, 1) = "." And Mid(Range("A4"), 7, 1) = "." And Mid(Range("A4"), 9, 1) = "." Then Exit Sub Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If 'pour tous les autres cas Case Else MsgBox ("Cette cellule doit être au format : " & Chr(10) & "#.#." & Chr(10) & "#.#.#." & Chr(10) & "##.#." & Chr(10) & "#.##." & Chr(10) & "#.#.##." & Chr(10) & "#.#.#.#." & Chr(10) & "##.##.#." & Chr(10) & "##.#.##." & Chr(10) & "##.#.#.#.") Range("A4") = "" Range("A4").Select End If End If End Sub
Si tu as un souci n'hésite pas à revenir.
Et bien voila, c'est nickel ! merci pijaku!
petite question (peut etre que tu auras la réponse ^^)
voila, j'ai fais ce petit code qui interdit de sélectionner certaines cellule de ma feuille. Cela marche bien (sauf que si l'utilisateur double clic sur un des cellules 'interdites' il peut qd même y accéder, mais bon j'ai pas trouvé d'autre solution - je ne veux pas de protection de feuille).
Par contre je voudrais que l'utilisateur puisse qd même sélectionner la ligne entière s'il le souhaite, mais comme la plupart du temps se trouve une cellule 'interdite' sur la ligne, ma macro s'active (et elle a raison! ^^).
Aurais tu une idée là dessus? merci
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Rg = Range("H40:I56,I59:I75,E94:H94,I78:I94,I113:I114,I118:I134,E137:I137,I138,I140,I160,I162,I164,I184,I186,H195:I197,I211,I215:I231,E251:H251,I235:I251")
If Not Application.Intersect(Target, Rg) Is Nothing Then _
Range("A2").Select
If Not Application.Intersect(Target, Rg) Is Nothing Then _
MsgBox "You are not allowed to modify the content of green cells"
petite question (peut etre que tu auras la réponse ^^)
voila, j'ai fais ce petit code qui interdit de sélectionner certaines cellule de ma feuille. Cela marche bien (sauf que si l'utilisateur double clic sur un des cellules 'interdites' il peut qd même y accéder, mais bon j'ai pas trouvé d'autre solution - je ne veux pas de protection de feuille).
Par contre je voudrais que l'utilisateur puisse qd même sélectionner la ligne entière s'il le souhaite, mais comme la plupart du temps se trouve une cellule 'interdite' sur la ligne, ma macro s'active (et elle a raison! ^^).
Aurais tu une idée là dessus? merci
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Rg = Range("H40:I56,I59:I75,E94:H94,I78:I94,I113:I114,I118:I134,E137:I137,I138,I140,I160,I162,I164,I184,I186,H195:I197,I211,I215:I231,E251:H251,I235:I251")
If Not Application.Intersect(Target, Rg) Is Nothing Then _
Range("A2").Select
If Not Application.Intersect(Target, Rg) Is Nothing Then _
MsgBox "You are not allowed to modify the content of green cells"
1- de rien pour les explications. Tu as assimilé cette macro?
2- pour ton souci de "protection", j'ai trouvé ici : https://www.excel-downloads.com/threads/empecher-lecriture-dans-une-cellule.78034/
sur le post de Bruce68 du 03/07/2007 à 02h25 du matin!!
une méthode par validation de données.
Tu sélectionnes toutes les cellules que tu désires protéger,
Données/Validation
dans l'onglet option :
- autoriser : choisir "personnalisé"
- Formule : ""
dans l'onglet alerte d'erreur :
- style : Arrêt
- titre : "Not Allowed"
- message d'erreur : "You are not allowed to modify the content of green cells"
OK
2- pour ton souci de "protection", j'ai trouvé ici : https://www.excel-downloads.com/threads/empecher-lecriture-dans-une-cellule.78034/
sur le post de Bruce68 du 03/07/2007 à 02h25 du matin!!
une méthode par validation de données.
Tu sélectionnes toutes les cellules que tu désires protéger,
Données/Validation
dans l'onglet option :
- autoriser : choisir "personnalisé"
- Formule : ""
dans l'onglet alerte d'erreur :
- style : Arrêt
- titre : "Not Allowed"
- message d'erreur : "You are not allowed to modify the content of green cells"
OK
c'est marrant j'ai plutot compris que tu voulais qque chose comme cela :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("a4").Value = "X.X.X.X." Then Exit Sub
If Range("a4").Value = "X.X.X.X." Then Exit Sub
If Range("a4").Value = "XX.X." Then Exit Sub
If Range("a4").Value = "XX.XX.X." Then Exit Sub
If Range("a4").Value = "X.X." Then Exit Sub
If Range("a4").Value = "XX.X.X.X." Then Exit Sub
If Range("a4").Value = "X.XX." Then Exit Sub
If Range("a4").Value = "XX.X.XX." Then Exit Sub
If Range("a4").Value = "X.X.XX." Then Exit Sub
Range("a4").Value =""
End Sub
ainsi a4 ne tolere que tes codes en x
merci qd même!