Limiter des cellules à 5 ou 10 chiffres

liquoreux

XLDnaute Junior
Bonjour,

1/Je cherche à obtenir une macro limitant dans deux colonnes le contenu des cellules à 5 (code postal) dans la colonne (A), ou à 10 chiffres (numéro de téléphone) dans la colonne (B). En cas d'erreur : renvoi à un message pour modifier.

J'ai déjà une macro pour contrôler le format date de naissance. Cela ne fonctionne pas pour le code postal et le numéro de téléphone.

Merci de m'aider à trouver les modifications nécessaires.

Range("D2:F2", Range("D2:F2").EntireColumn.Find(What:="*", SearchDirection:=xlPrevious)).SpecialCells(xlCellTypeConstants).Select
For Each cell In Selection
If Not IsDate(cell) Or cell.NumberFormatLocal <> "jj/mm/aaaa" Or Right(cell, 4) < "2000" Then
cell.Select
cell.Font.ColorIndex = 3
cell.Interior.ColorIndex = 1
message = InputBox("Entrez un format de date (jj/mm/aaaa) en utilisant les symboles suivants :" & vbLf & " j pour jour" & vbLf & " m pour mois" & vbLf & " a pour année" & vbLf & "Exemple : " & Date)
If message = "" Then Exit Sub
cell.Value = message
cell.Font.ColorIndex = 1
cell.Interior.ColorIndex = 0
Do While Not IsDate(cell) Or cell.NumberFormatLocal <> "jj/mm/aaaa" Or Right(cell, 4) < "2000"
cell.Font.ColorIndex = 3
cell.Interior.ColorIndex = 1
message = InputBox("veuillez recommencer")
If message = "" Then Exit Sub
If Not IsDate(cell) Or cell.NumberFormatLocal <> "jj/mm/aaaa" Or Right(cell, 4) < "2000" Then
cell.Value = message
cell.Font.ColorIndex = 1
cell.Interior.ColorIndex = 0
Exit Do
End If
Loop

End If
Next


2/Dans cette formule, je souhaiterais intégrer la vérification d'autres colonnes sans pour autant avoir à recopier la formule autant de fois qu'il y a de zones à contrôler (ici il y en a 4)

Range("D2:F2", Range("D2:F2").EntireColumn.Find(What:="*", SearchDirection:=xlPrevious)).SpecialCells(xlCellTypeConstants).Select

Range("R2:R2", Range("R2:R2").EntireColumn.Find(What:="*", SearchDirection:=xlPrevious)).SpecialCells(xlCellTypeConstants).Select

Range("U2:W2", Range("U2:W2").EntireColumn.Find(What:="*", SearchDirection:=xlPrevious)).SpecialCells(xlCellTypeConstants).Select

Range("Y2:Z2", Range("Y2:Z2").EntireColumn.Find(What:="*", SearchDirection:=xlPrevious)).SpecialCells(xlCellTypeConstants).Select

Merci d'avance pour votre aide.
 

kiki29

XLDnaute Barbatruc
Re : Limiter des cellules à 5 ou 10 chiffres

Salut, à tenter et sans doute à modifier
Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Inter As Range
    Set Inter = Application.Intersect(Feuil1.Columns(1), Target)
    If Not Inter Is Nothing Then
        Target = Left$(Target, 5)
        Target.NumberFormat = "00000"
    End If

    Set Inter = Application.Intersect(Feuil1.Columns(2), Target)
    If Not Inter Is Nothing Then
        Target = Left$(Target, 10)
        Target.NumberFormat = "0#"" ""##"" ""##"" ""##"" ""##"
    End If
End Sub
 

liquoreux

XLDnaute Junior
Re : Limiter des cellules à 5 ou 10 chiffres

Je transmets le fichier concerné car je ne sais pas intégrer cette nouvelle formule.

Code postal : colonne 12
Numéro de téléphone : colonne 28.

Attention, compte tenu de la limitation de taille, j'ai supprimé l'onglet "BASE".

Merci de votre aide.
 

Pièces jointes

  • Candidatures_construction_2010.xls
    47 KB · Affichages: 59

liquoreux

XLDnaute Junior
Re : Limiter des cellules à 5 ou 10 chiffres

A moins d'avoir oublié quelque chose, je reviens sur cette question parce que la Validation pose un problème.

En effet, si le numéro rentré n'est pas bon, il suffit de cliquer sur annuler et le numéro eroné reste dans la cellule

Or, je souhaite obliger la correction comme pour la macro suivante qui vérifit notamment le format date (Liste3) :

Liste1 = Array("NOM", "BUREAU DISTRIBUTEUR", "CANDIDATURE SPONTANNEE", "REPONSE A ANNONCE", "SERVICE", "REPONSE A CANDIDATURE", "REPONSE DU SERVICE")
For n = LBound(Liste1) To UBound(Liste1)
Set c = Sheets("SAISIE").Rows(1).Find(Liste1(n), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
Range(c, .Offset(1, 0), c.Offset(1, 0).EntireColumn.Find(What:="*", SearchDirection:=xlPrevious)).Select
For Each cell In Selection
cell.Value = UCase(cell.Value)
Next cell
End If
Next n


Liste2 = Array("Prénom", "Adresse N°1", "Adresse N°2", "Poste Demande N°1", "Poste Demande N°2", "Poste Demande N°3", "Tout Poste")
For n = LBound(Liste2) To UBound(Liste2)
Set c = Sheets("SAISIE").Rows(1).Find(Liste2(n), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
Range(c, .Offset(1, 0), c.Offset(1, 0).EntireColumn.Find(What:="*", SearchDirection:=xlPrevious)).Select
For Each cell In Selection
cell.Formula = StrConv(cell.Formula, vbProperCase)
Next cell
End If
Next


Liste3 = Array("Date Lettre Candidat", "DATE LETTRE ATTENTE", "DATE REPONSE", "DATE ANNONCE", "Date Entretien N°1", "DATE ENTRETIEN N°2", "DATE ENTRETIEN N°3", "DATE DENVOI", "DATE DE RETOUR")
For n = LBound(Liste3) To UBound(Liste3)
Set c = Sheets("SAISIE").Rows(1).Find(Liste3(n), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
Range(c, .Offset(1, 0), c.Offset(1, 0).EntireColumn.Find(What:="*", SearchDirection:=xlPrevious)).SpecialCells(xlCellTypeConstants).Select
For Each cell In Selection
If Not IsDate(cell) Or cell.NumberFormatLocal <> "jj/mm/aaaa" Or Right(cell, 4) < "2000" Then
cell.Select
cell.Font.ColorIndex = 3
cell.Interior.ColorIndex = 1
Message = InputBox("Entrez un format de date (jj/mm/aaaa) en utilisant les symboles suivants :" & vbLf & " j pour jour" & vbLf & " m pour mois" & vbLf & " a pour année" & vbLf & "Exemple : " & Date)
If Message = "" Then Exit Sub
cell.Value = Message
cell.Font.ColorIndex = 1
cell.Interior.ColorIndex = 0
Do While Not IsDate(cell) Or cell.NumberFormatLocal <> "jj/mm/aaaa" Or Right(cell, 4) < "2000"
cell.Font.ColorIndex = 3
cell.Interior.ColorIndex = 1
Message = InputBox("veuillez recommencer")
If Message = "" Then Exit Sub
If Not IsDate(cell) Or cell.NumberFormatLocal <> "jj/mm/aaaa" Or Right(cell, 4) < "2000" Then
cell.Value = Message
cell.Font.ColorIndex = 1
cell.Interior.ColorIndex = 0
Exit Do
End If
Loop

End If
Next
End If
Next n

Macro simplifiée et de modifiée par pierrejean :
https://www.excel-downloads.com/threads/simplification-dune-macro.130367/


Merci pour votre aide.
 

Pièces jointes

  • Simplication_macro.xls
    31 KB · Affichages: 55
  • Simplication_macro.xls
    31 KB · Affichages: 60
  • Simplication_macro.xls
    31 KB · Affichages: 57
Dernière édition:

job75

XLDnaute Barbatruc
Re : Limiter des cellules à 5 ou 10 chiffres

Re,

A moins d'avoir oublié quelque chose, je reviens sur cette question parce que la Validation pose un problème.

En effet, si le numéro rentré n'est pas bon, il suffit de cliquer sur annuler et le numéro eroné reste dans la cellule.

Désolé d'avoir été dur, mais là encore je ne comprends pas...

Une validation ça sert à quelque chose, et c'est préférable à n'importe quel code VBA (on peut toujours neutraliser les macros).

A+
 

liquoreux

XLDnaute Junior
Re : Limiter des cellules à 5 ou 10 chiffres

J'ai besoin que l'utilisateur, qui n'est ni un pratiquant régulier de macro ni un expert de l'informatique, soit obligé de corriger la saisie eronée qu'il a faite.

La Validation ne le permet pas en totalité. Elle peut être facilement contournée par le bouton "Annuler". Essayez.

La macro qui vérifit le format date fonctionne très bien.

Je souhaiterais la transposer pour le code postal et le numéro de téléphone.

Mes tentatives de modification ("00000", etc) sont restées infructueuses.
 

Discussions similaires

Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
312 685
Messages
2 090 946
Membres
104 705
dernier inscrit
Mike72