Cellule Excel limitée à 25 caractères / limitée à "Oui" ou "Non" [Résolu]

Signaler
Messages postés
23
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
5 septembre 2006
-
valtrase
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
-
Bonjour, et tous mes voeux à toutes et à tous !!

Et voilà le premier (léger) problème pour 2006, je dispose de cellules excel, dans lequels j'aimerais limité le nombre de caratères alphanumériques à l'intérieur, afin d'éviter de futur bugs^^

J'ai également d'autres cellules ou il doit avoir une valeur alternative OUI ou NON, et d'autre 1 ou 2

Voilà si vous pouriez m'aidez, ça vous constiturais surement la première Bonne Action pour 2006

Merci !!

Bop

7 réponses

Messages postés
215
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
9 avril 2010
3
So ...

passons par une boucle ...

for i = 1 to 50 'ou le nb de cellule à controler
if len(range("C" & i &"") > 25 then msgbox "plus de 25 ... dans la cellule C" & i: exit sub 'car ton programme devra s'arréter je pense
next

Voili voilou

*********** Si cette réponse vous convient, merci de valider ce post ***********

ChaPaTa
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 139 internautes nous ont dit merci ce mois-ci

Messages postés
215
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
9 avril 2010
3
Hello ,

limité le nb de caractère dans une cellule ... je dirais 2 possibilité :

passe par les fonctions d'excel directement ... (NBCAR) mais cela n'empchera pas l'utilisateur d'en mettre 26, c'est juste une info, donc inutile si tu veux bloquer le nb de carac

ou (il me semble que celle-ci est plus approprié)

if len(selection) > 25 then
msgbox "Plus de 25 caractères"
else
'mon traitement ....
end if

Pour ce qui est de oui ou non :


With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="Oui,Non" 'ou ce que tu veux séparer par des virgules
.IgnoreBlank = True
.InCellDropdown = True
.ErrorMessage = "Valeur Incorrect"
End With

*********** Si cette réponse vous convient, merci de valider ce post ***********

ChaPaTa
Messages postés
23
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
5 septembre 2006

Salut Chapata,

Dans ton code, tu me dis "if len(selection) > 25 then"

Je vais avoir une colonne (de 50 lignes) à contrôler avec les mêmes contraintes, c à dire que "C1:C50", chaque cellule ne doit pas dépasser 25 caractères.

Un "if len("C1:C50") > 25 then" marcherais pour chacune de mes cellules de la sélection ??

(en tout cas, ton code semble répondre à mo, atte,te, pas encore testé )
Messages postés
23
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
5 septembre 2006

Wow une boucle !! (autant pour moi, ça doit être la faim qui empèche de réfléchir )

Bon sinon g un p'tit problème avec le with :

Range("D5").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="OUI,NON"
.IgnoreBlank = True
.InCellDropdown = True
.ErrorMessage = "Valeur Incorrect"
End With

Le programme me met à la ligne du .AddType le message d'erreur suivant :
Erreur d'execution '1004'
Erreur définie par l'application ou par l'objet

Il faut savoir que j'ai placé ce code dans la procédure Controle de mon module ControleFeuille. Et dans ma feuille Excel, j'ai inscrit ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
Controle
End Sub

Tu penses que l'erreur viendrait d'ici ??
Messages postés
215
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
9 avril 2010
3
déjà un problème de réglé ...

tu peux aussi faire directement :

With Range("D5").Validation
au lieu de pré-sélectionner la cellule ... par range("D5").select, plus rapide ...
et si tu as plusieurs cellule ... boucle ...

par contre au niveau du prob avec "with" ...essai de mettre le code directment dans une sub à part pour voir s'il fonctionne ? car je ne vois pas d'où peut venir le prob. (sorry)

Bon courage pour la suite ...

et bonne année bien sur.

ChaPaTa
Messages postés
23
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
5 septembre 2006

J'ai essayé dans une nouvelle procédure pour le with..... marche tjs po

J'ai aussi utilisé With Range("D5").Validation...... non plus

Mais peut être, je dois déclarer un objet validation non ?? A vrai dire, c'est la première fois que j'utilise cette clause, et à part avoir taper le code en brut, je n'ai fait aucune déclaration...

Tu saurais comment la clause Validation fonctionne ?? (l'aide vba est pauvre, leur exemple plente également, et je n'ai pas accès à msdn...)
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
3
Lut,
voici un but de code pour commencer
' On part sur le principe que tes plages sont nomées comme ceci
' OuiNon pour les plages dont la valeur doit être oui ou non
' To1Or2 pour les plages dont la valeur doit être 1 ou 2
' Max25 pour les plages dont la longueur doit être de 25 max


Private Sub Worksheet_Change(ByVal Target As Range)


If Target = "" Then Exit Sub
If IsCellInRange(Target, "OuiNon") Then
If Target.Value <> "oui" And Target.Value <> "non" Then
Target.Value = "": MsgBox "entrez oui ou non comme valeur"
End If
ElseIf IsCellInRange(Target, "To1Or2") Then
If Target.Value <> 1 And Target.Value <> 2 Then
Target.Value = "": MsgBox "entrez 1 ou 2 comme valeur"
End If
ElseIf IsCellInRange(Target, "Max25") Then
If Len(Target.Value) > 5 Then
Target.Value = Right(Target.Value, 5)
End If
End If
End Sub


Function IsCellInRange(Rng As Range, RangeName As String) As Boolean
On Error Resume Next
IsCellInRange = _
Not (Application.Intersect(Rng, Range(RangeName)) Is Nothing)
End Function

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé