Fonction if sur colonne

je remet ici ma procédure, que Jean-Eric a critiqué :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  On Error Resume Next
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Row < 5 Then Exit Sub
    If .Column <> 1 Then
      Unload Calendrier: Err.Clear: On Error GoTo 0
      If .Column = 6 Then
        Application.EnableEvents = False
        .HorizontalAlignment = 3
        If .Value = "" Then .Value = "X" Else .Value = ""
        Application.EnableEvents = True
      End If
    Else
      Calendrier.Show 0
    End If
  End With
End Sub

Jean-Eric a écrit :

Une gestion d'erreur qui me semblait inutile

faux ! On Error Resume Next est là pour éviter le plantage causé par la fermeture d'un formulaire non chargé.

ensuite, On Error Goto 0 désactive la gestion des erreurs dans la procédure en cours (source Microsoft).

rappel : dans ce post, Ronibo a écrit :

« à l'ouverture du fichier, vu que l'usf calendrier est pas ouvert ça plante ici : Unload Calendrier »

c'est exactement pour ça que j'ai ajouté ma gestion d'erreur !


Jean-Eric a écrit :

Une procédure qui commence par 2 Exit Sub

et alors ?

* le 1er Exit Sub est pour sortir de la procédure si la sélection comporte plus d'une cellule

* le 2ème Exit Sub est pour sortir de la procédure si le n° ligne de la cellule active < 5

et si un autre cas fait que la suite de la procédure ne devrait pas s'exécuter, j'aurais mis un 3ème Exit Sub.

il est fait pour ça, et la remarque de Jean-Eric est un faux reproche, donc sans objet.


Jean-Eric a écrit :

L'utilisation de EnableEvents

là, je suis d'accord : j'ai testé sans et ça marche ; j'avais pensé qu'il fallait le mettre car on modifie Target ; mais comme c'est avec Worksheet_SelectionChange() et non pas Worksheet_Change(), EnableEvents effectivement inutile ; d'où ce nouveau code VBA :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  On Error Resume Next
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Row < 5 Then Exit Sub
    If .Column <> 1 Then
      Unload Calendrier: Err.Clear: On Error GoTo 0
      If .Column = 6 Then
        .HorizontalAlignment = 3
        If .Value = "" Then .Value = "X" Else .Value = ""
      End If
    Else
      Calendrier.Show 0
    End If
  End With
End Sub

voici maintenant la sub de Jean-Eric :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.CountLarge = 1 Then
        Select Case True
            Case Target.Column = 1 And Target.Row > 4: Calendrier.Show 0
            Case Target.Row < 5: Unload Calendrier
            Case Target.Column = 6 And Target.Row > 4:
            Target.Value = IIf(IsEmpty(Target), "X", "")
            Unload Calendrier
            Case Else: Unload Calendrier
        End Select
    End If
End Sub

* 3 instructions Unload Calendrier quand je l'avais mis une seule fois ? je n'appelle pas ça une simplification de code !

* comme il n'y a pas de gestion d'erreur, Ronibo risque de rencontrer le même problème que précédemment :

à l'ouverture du fichier, comme l'usf calendrier n'est pas ouvert, Unload Calendrier plante !

dhany

@Ronibo

merci d'avoir passé le sujet en résolu !

bonne continuation !

dhany

bonsoir à vous deux,

désolé du retard je viens seulement me libérer, j'ai pas eu le temps de tester de façon approfondi le code de JEAN ERIC, première vu il fonctionnait comme une horloge, après dhany a repéré les failles ))

se qui compte c'est que je comprends un peu les écriture et que mon problème soit résolu

merci à vous deux

Bonsoir Ronibo,

je suis d'accord avec toi : l'essentiel est que le problème soit réglé.

tu peux faire la fête ! youpi !

dhany

c'est moi qui paye la bouteille

Rechercher des sujets similaires à "fonction colonne"