Bonsoir à tous,
Je bloque sur des formules que j'aimerai imbriquer.
En effet, si certaines cellules ne sont pas renseignées ou que d'autres ne doivent pas l'être, alors message d'alerte.
Je pense que la formule SI(NB(... serait adaptée, mais comment indiquer tous ces arguments et tout imbriquer ?
Je joins un fichier dans ce post avec un exemple qui fonctionne avec 3 locations (mais il manque des arguments).
Merci pour votre aide.
Tchotchodu31
Je suppose que quand on a N locations, ce sont les N premières lignes qui doivent être remplies. Et non N lignes remplies.
Par ex si 3 locations mais lignes 1,2,5 remplies c'est KO. ( donc NB.si posera problème )
En PJ un essai avec une fonction perso :
VB:
Function Warning(chaine)
Application.Volatile
N = Val(Left(chaine, InStr(chaine, " ") - 1))
For L = 7 To 6 + N
If Cells(L, "E") = "" Then
Warning = "Lignes vides dans plage désirée"
Exit Function
End If
Next L
For L = 7 + N To 18
If Cells(L, "E") <> "" Then
Warning = "Lignes non vides en dehors de la plage désirée"
Exit Function
End If
Next L
Warning = "Ok"
End Function
Bonsoir Eriiiic, djidji59430, sylvanu, le forum,
Merci pour ces 2 propositions intéressantes.
Concernant celle d'eriiiic, le résultat est faux en E20 quand je choisi 1 location et que je saisi d'autres valeurs en dessous.
La proposition de sylvanu ne tient pas compte de la valeur 0 si 2 locations avec 1 et 0 en dessous.
De façon générale, le zéro ne doit pas être considéré comme une valeur juste.
Merci pour votre aide.
Tchotchodu31
Bonjour sylvanu, le forum,
Après avoir fait plusieurs tests, je rencontre un problème d'affichage à l'étape 3 de ma page de saisies.
Je pense que l'une des 2 macro que tu m'as proposé pose problème.
Je joins un exemple dans ce post.
A bientôt.
Tchotchodu31
Si le module ne doit pas être exécuté alors modifiez le pour l'invalider si l'appel vient de E59 :
Code:
'****************************************
'ADAPTE L'AFFICHAGE AU NOMBRE DE LOCATION
'****************************************
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$59" Then Exit Sub
Application.ScreenUpdating = False
Rows("38:49").Hidden = True 'masque tout
If Val(Range("E37")) Then Rows(38).Resize(Val(Range("E37"))).Hidden = False
End Sub
Si vous voulez que l'action Masque ne se produise que par modification de la cellule E37 alors il vous faut faire :
VB:
'****************************************
'ADAPTE L'AFFICHAGE AU NOMBRE DE LOCATION
'****************************************
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("E37")) Is Nothing Then
Application.ScreenUpdating = False
Rows("38:49").Hidden = True 'masque tout
If Val(Range("E37")) Then Rows(38).Resize(Val(Range("E37"))).Hidden = False
End If
End Sub
Mais ma macro que vous utilisez est la fonction Warning et ne touche en aucun cas aux lignes. Elle en serait bien incapable, elle n'est pas faite pour ça.
Si problème, remettez le message sur le fil 20050831 d'où vient cette macro, sinon on va tout mélanger. Le futur lecteur de ce fil ne comprendra rien.
Si le module ne doit pas être exécuté alors modifiez le pour l'invalider si l'appel vient de E59 :
Code:
'****************************************
'ADAPTE L'AFFICHAGE AU NOMBRE DE LOCATION
'****************************************
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$59" Then Exit Sub
Application.ScreenUpdating = False
Rows("38:49").Hidden = True 'masque tout
If Val(Range("E37")) Then Rows(38).Resize(Val(Range("E37"))).Hidden = False
End Sub
Si vous voulez que l'action Masque ne se produise que par modification de la cellule E37 alors il vous faut faire :
VB:
'****************************************
'ADAPTE L'AFFICHAGE AU NOMBRE DE LOCATION
'****************************************
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("E37")) Is Nothing Then
Application.ScreenUpdating = False
Rows("38:49").Hidden = True 'masque tout
If Val(Range("E37")) Then Rows(38).Resize(Val(Range("E37"))).Hidden = False
End If
End Sub
Mais ma macro que vous utilisez est la fonction Warning et ne touche en aucun cas aux lignes. Elle en serait bien incapable, elle n'est pas faite pour ça.
Si problème, remettez le message sur le fil 20050831 d'où vient cette macro, sinon on va tout mélanger. Le futur lecteur de ce fil ne comprendra rien.
Bonjour sylvanu,
Désolé, je pensai que la macro venait de vous.
Merci pour cette correction qui fonctionne très bien.
J'en ai profité pour apporter un complément d'information dans la solution du post 20050831.
Très bon week-end.
Tchotchodu31
La solution qui résout votre problème décrit dans ce fil n'est pas le post #11 mais le post #4.
Pensez à nos amis qui reliront plus tard ce fil, ils vont être perdus.
La solution qui résout votre problème décrit dans ce fil n'est pas le post #11 mais le post #4.
Pensez à nos amis qui reliront plus tard ce fil, ils vont être perdus.