Probleme avec une Worksheet

Résolu
Mistral_13200 Messages postés 636 Date d'inscription   Statut Membre Dernière intervention   -  
Mistral_13200 Messages postés 636 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir à tous,

J'ai un souci avec une procédure Worksheet sur laquelle j'ai passé une bonne partie de l'AM sans trouver la solution. J'espère que quelqu'un pourra m'aider.
Dans cette procédure, après une première partie qui est commune je traite 3 cas différents avec une instruction " Select Case ". Le 1er et 3iem cas fonction parfaitement, seul le 2iem cas me pose problème. Petite précision je teste les mêmes conditions dans les deux premiers "CaseV, la différence réside dans la façon de repositionner la cellule active à la fin de chaque instruction "IF ".
Quand je passe dans "Case 31 To 39" deux cas :
- Si je passe en premier dans le second "IF" (Adhérent non à jour), c'est bon.
- Si je passe dans le premier "IF " j'effectue bien ce qui est écrit mais quand Je clic sur le bouton Ok de la boîte de dialogue j'ai un message d'erreur « Erreur d'exécution "13". Incompatibilité de type » sur la première ligne du deuxième "IF" : If Cells(sel.Row, 21).Value = 0 Then. Je ne comprends pas...
Toute la procédure est ci-dessous.
Merci d'avance pour votre aide car après plusieurs heures...
Cordialement
Mistral


Private Sub Worksheet_Change(ByVal sel As Range)

' Surveille si une saisie a lieu sur la colonne "D" et a partir de la ligne 28.
If sel.Column = 4 And sel.Row > 27 Then
Dim cel As Range, rien As Boolean
rien = False
For Each cel In sel.Cells
If cel.Value = "" Then
ActiveSheet.Unprotect ("")
cel.Offset(0, 5).Value = ""
ActiveSheet.Protect ("")
rien = True
End If
Next cel
If rien Then Exit Sub
If sel.Count > 1 Then Exit Sub

' Surveille le nombre de maximum de X par auteur (Maxi = le Nb max). (Fonctionnement OK)
If sel.Value = False Then sel.Value = "": Exit Sub
If Application.WorksheetFunction.CountIf(Range("D:D"), sel.Value) > [maxi].Value Then
MsgBox ("Le nombre de X autorisé pour cet auteur" & vbCr & "est déjà atteint."), vbCritical, "Fédération de France"
sel.Value = ""
sel.Select
Exit Sub
End If

Select Case [Num_Compet]
Case 11 To 29, 51 To 69 ' Traitement des X.

' Surveille si une cellule de la colonne " P " contient un N° d'un non adhérent F.X.F".
If Cells(sel.Row, 16).Value = "Numéro d'adhérent inconnu..." Then
MsgBox "Cet auteur n'est pas adhérent de la F.X.F!" & Chr(10) & _
" " & Chr(10) & _
"Il ne peut donc pas participer à cette compétition!" & Chr(10) & _
" " & Chr(10) & _
"Désolé..." & Chr(10) & _
" ", vbCritical, "Fédération X de France"
sel.Value = ""
sel.Select
Exit Sub
End If

' Surveille si une cellule de la colonne "U" contient un adhérent non à jour de sa cotisation. (Fonctionnement correct).
If Cells(sel.Row, 21).Value = 0 Then
MsgBox "Cet auteur n'est pas à jour de sa cotisation F.X.F!" & Chr(10) & _
" " & Chr(10) & _
"Il ne peut donc pas participer à cette compétition!" & Chr(10) & _
" " & Chr(10) & _
"Désolé..." & Chr(10) & _
" ", vbCritical, "Fédération de France"
sel.Value = ""
sel.Select
Exit Sub
End If

Case 31 To 39 ' Traitement du X.
'Surveille si une cellule de la colonne "P" contient "Numéro d'adhérent inconnu".
If Cells(sel.Row, 16).Value = "Numéro d'adhérent inconnu..." Then
MsgBox "Cet auteur n'est pas adhérent de la F.X.F!" & Chr(10) & _
" " & Chr(10) & _
"Il ne peut donc pas participer à cette compétition!" & Chr(10) & _
" " & Chr(10) & _
"Désolé..." & Chr(10) & _
" ", vbCritical, "Fédération X de France"
sel.Value = ""
sel.Offset(0, -1).Value = ""
sel.Offset(0, -1).Select
Else
sel.Offset(1, -1).Select
End If

'Surveille si une cellule de la colonne "U" contient un adhérent non à jour de sa cotisation.
If Cells(sel.Row, 21).Value = 0 Then
MsgBox "Cet auteur n'est pas à jour de sa cotisation F.X.F!" & Chr(10) & _
" " & Chr(10) & _
"Il ne peut donc pas participer à cette compétition!" & Chr(10) & _
" " & Chr(10) & _
"Désolé..." & Chr(10) & _
" ", vbCritical, "Fédération X de France"
sel.Value = ""
sel.Offset(0, -1).Value = ""
sel.Offset(0, -1).Select
Else
sel.Offset(1, -1).Select
End If

Case 41 To 49 ' Traitement du X.
'Surveille si une cellule de la colonne " P " contient "Numéro d'adhérent inconnu".
If Cells(sel.Row, 16).Value = "Numéro d'adhérent inconnu..." Then
'Surveille la validité du N° d'un non adhérent : > 9000 et numérique
If sel.Value < 9000 Or Not IsNumeric(sel.Value) Then
MsgBox ("Pour un auteur sans X vous devez" & vbCr & "obligatoirement saisir un N° > à 9000."), vbInformation, "Fédération X de France"
sel.Value = Application.InputBox("Saisissez un numéro > 9000." & vbCr & vbCr & "Validation par OK.", "Numéro d'un non ahérent.", , 300, 140, Type:=1)
Exit Sub
End If
'Déclaration des variables
Dim nom As Variant
Dim pnom As Variant
'Ouverture de la boite pour saisir le nom et contrôle.
nom = Application.InputBox("Saisissez le Nom." & vbCr & vbCr & "Validation par OK.", "Nom d'un non adhérent.", , 300, 140)
If nom = False Then
sel.Value = ""
sel.Select
Exit Sub 'Vérifie si la toucher Annuler est active.
End If
'Ouverture de la boite pour saisir le prénom et contrôle.
pnom = Application.InputBox("Saisissez le prénom." & vbCr & vbCr & "Validation par OK.", "Prénom d'un non adhérent.", , 300, 140)
If pnom = False Then
sel.Value = ""
sel.Select
Exit Sub 'Vérifie si la toucher Annuler est active.
End If
'Mise au format nom propre (1er lettre en majuscule).
nom = UCase(Left(nom, 1)) & Mid(nom, 2)
pnom = UCase(Left(pnom, 1)) & Mid(pnom, 2)
' Remplacement du contenu de la cellule en erreur.
ActiveSheet.Unprotect ("")
Cells(sel.Row, 9).Value = nom & " " & pnom
ActiveSheet.Protect ("")
End If
sel.Offset(1, 0).Select

End Select
End If
End Sub

21 réponses

Mistral_13200 Messages postés 636 Date d'inscription   Statut Membre Dernière intervention   4
 
Tu n'as pas à être désolé tu n'es nullement responsable.
En tout cas merci pour ton aide.
Je vais cloturer cette question.
Chercher encore un moment et si je n'arrive à rien je relancerais une autre question.
Encore mille merci à toi.
Cordialement
Mistral
0