Autres Limiter le nombre de caractère copiés dans une cellule

saralht

XLDnaute Nouveau
Bonjour,

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

EXCEL 2310
 
Solution
Re

@saralht

Le code de la macro
VB:
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
1699628768739.png


En G3 tu mets le nombre de caractères que tu veux

1699628835777.png


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...

saralht

XLDnaute Nouveau
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 😂😂
 

patricktoulon

XLDnaute Barbatruc
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
 

saralht

XLDnaute Nouveau
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
Merci.
Possible d'avoir plus de précisions sur la marche à suivre pour intégrer cette macros stp ?
 

Phil69970

XLDnaute Barbatruc
Re

@saralht

Le code de la macro
VB:
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
1699628768739.png


En G3 tu mets le nombre de caractères que tu veux

1699628835777.png


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

Je t'ai perdu ?? 🤔
 

Phil69970

XLDnaute Barbatruc
RE

Et version ou tout est figé dans le code

VB:
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

C'est ici que tu fixes la longueur dans le code
If Len(Target) > 5 Then ' A ajuster si besoin
 

saralht

XLDnaute Nouveau
Re

@saralht

Le code de la macro
VB:
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
Regarde la pièce jointe 1183424

En G3 tu mets le nombre de caractères que tu veux

Regarde la pièce jointe 1183425

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

Je t'ai perdu ?? 🤔
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
 

Phil69970

XLDnaute Barbatruc
Re

@saralht

1)
1- suis-je obligée d'avoir une cellule de référence ?
Réponse voir mon post # 9

2)
2- Comment appliquer la limite à toute une colonne ?
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)
puis à plusieurs colonnes
Quelle colonne ?
If Not Application.Intersect(Target, Range("B:C")) Is Nothing Then
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 o_O

B) Feuilletonner la question n'est pas bien vu sur le forum car c'est souvent sans fin 🤔
Voir la charte
1699634101426.png


Merci de ton retour
 

saralht

XLDnaute Nouveau
Re

@saralht

1)

Réponse voir mon post # 9

2)

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 o_O

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

Merci de ton retour
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.

Tes réponses m'ont beaucoup aidé.

Et merci pour l'info concernant la charte.

Bonne soirée
 

Discussions similaires

Réponses
2
Affichages
164

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino