Je cherche désespérément un code VBA pour empêcher les utilisateurs de mon fichier Excel de SAISIR ou COLLER plus de 30 caractères dans une cellule.
Je ne maîtrise pas du tout les macros.
Merci beaucoup
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B3")) Is Nothing Then
If Len(Target) > Range("G3") Then
Range("B3").ClearContents
MsgBox "Trop de caractere maxi " & Range("G3") & " caractères", vbCritical, "Vous avez un problème !"
End If
End If
End Sub
A mettre ici
En G3 tu mets le nombre de caractères que tu veux
Pour l'exemple j'ai mis 5
Et en B3 tu fais tout ce que tu veux mais si tu dépasses 5 caractères tu auras un message que cela soit par copier/coller ou directement dans la cellule
Bien sur on peut en modifiant le code et le message pour figer en dur dans le code VBA la longueur...
Merci pour ta réponse. Avec cette méthode, mes utilisateurs peuvent coller plus de caractères. Donc mon objectif est de les empêcher également de coller.
Ma cellule ne devrait pas accepter plus d’un certain nombre de caractère même en copiant collant.
Pour la version, j’ai regardé dans les info mais j’avoue ça m’a paru bizarre aussi
rre
bonjour
sinon en vba et en plus (en late binding) le dataobject
VB:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.GetFromClipboard
If Len(.GetText(1)) > 30 Then .SetText "": .PutInClipboard
End With
End Sub
c'est beau la vie non
et si tu veux vraiment enpêcher le collage par les touches
met ce code directement dans le selectchange
rre
bonjour
sinon en vba et en plus (en late binding) le dataobject
VB:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.GetFromClipboard
If Len(.GetText(1)) > 30 Then .SetText "": .PutInClipboard
End With
End Sub
c'est beau la vie non
et si tu veux vraiment enpêcher le collage par les touches
met ce code directement dans le selectchange
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B3")) Is Nothing Then
If Len(Target) > Range("G3") Then
Range("B3").ClearContents
MsgBox "Trop de caractere maxi " & Range("G3") & " caractères", vbCritical, "Vous avez un problème !"
End If
End If
End Sub
A mettre ici
En G3 tu mets le nombre de caractères que tu veux
Pour l'exemple j'ai mis 5
Et en B3 tu fais tout ce que tu veux mais si tu dépasses 5 caractères tu auras un message que cela soit par copier/coller ou directement dans la cellule
Bien sur on peut en modifiant le code et le message pour figer en dur dans le code VBA la longueur du texte en B3
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B3")) Is Nothing Then
If Len(Target) > 5 Then ' A ajuster si besoin
Range("B3").ClearContents
MsgBox "Trop de caractere maxi 5 caractères", vbCritical, "Vous avez un problème !"
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B3")) Is Nothing Then
If Len(Target) > Range("G3") Then
Range("B3").ClearContents
MsgBox "Trop de caractere maxi " & Range("G3") & " caractères", vbCritical, "Vous avez un problème !"
End If
End If
End Sub
Pour l'exemple j'ai mis 5
Et en B3 tu fais tout ce que tu veux mais si tu dépasses 5 caractères tu auras un message que cela soit par copier/coller ou directement dans la cellule
Bien sur on peut en modifiant le code et le message pour figer en dur dans le code VBA la longueur du texte en B3
J'ai testé ce code et ça a l'air de bien fonctionner. C'est magique.
Merci beaucoup
2 petites questions : 1- suis-je obligée d'avoir une cellule de référence ?
2- Comment appliquer la limite à toute une colonne ? puis à plusieurs colonnes
Je te propose ce code qui contrôle toute la colonne B et toujours avec 5 caractères
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
If Len(Target) > 5 Then ' A ajuster si besoin
Target.ClearContents
MsgBox "Trop de caractere maxi 5 caractères", vbCritical, "Vous avez un problème !"
End If
End If
End Sub
Je te propose ce code qui contrôle toute la colonne B et toujours avec 5 caractères
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
If Len(Target) > 5 Then ' A ajuster si besoin
Target.ClearContents
MsgBox "Trop de caractere maxi 5 caractères", vbCritical, "Vous avez un problème !"
End If
End If
End Sub
3)
Quelle colonne ?
Dans cet exemple ce sont les colonnes B et C qui sont contrôlés
A toi d'adapter
Perso :
A) Remplir ton fichier risque de devenir un enfer pour l'utilisateur
B) Feuilletonner la question n'est pas bien vu sur le forum car c'est souvent sans fin
Voir la charte Regarde la pièce jointe 1183434
Super je te remercie.
Je suis obligée de définir le nombre de caractères pour 2 colonnes afin que mon fichier soit accepté par mon logiciel de facturation. sinon il ne le reconnait pas.