Fonction if sur colonne

Bonjour,

je souhaite appliquer une condition if sur une plage de cellule bien précise :

ca concerne : Range("F4:F1048576")

si on fait une sélectionne sur une de ces cellule de la colonne F, mettre un "X" à l'intérieur

merci d'avance

Rebonjour Ronibo,

je te propose ce fichier Excel :

100exo-ronibo.xlsm (12.66 Ko)

dhany

RE bonjour dhany

en plein dans le mille

est ce que tu pense qu'on peut ouvrir un usf a la place du "X" ?

je souhaite ouvrir un calendrier lors d'une sélection d'une cellule depuis la colonne

J'ai essayé cela mais rien ce passe :

If Not Intersect(Target, Range("A4:A1048576")) Is Nothing Then: Calendrier.Show 0

j'ai trouvé... j'ai mis cette ligne en premier

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("A4:A1048576")) Is Nothing Then: Calendrier.Show 0

Dim N&: N = Cells(Rows.Count, 1).End(xlUp).Row

Me.Label1.Caption = "Le solde du compte est de " & Format(Application.Sum(Range("E4:E" & N)) - Application.Sum(Range("D4:D" & N)), "# ##0.00 ?")

With Target

If .CountLarge > 1 Then Exit Sub

If .Column <> 6 Then Exit Sub

If .Row < 4 Then Exit Sub

Application.EnableEvents = False

.HorizontalAlignment = 3: .Value = "X"

Application.EnableEvents = True

End With

End Sub

un fichier ci joint )

par contre pouvons nous fermer l'usf si je sélection une cellule en dehors de la colonne A?

78classeur1.xlsm (27.58 Ko)
tu a écrit :

en plein dans le mille

merci pour ton retour !


tu a écrit :

on peut ouvrir un usf a la place du "X" ?

nouveau code VBA :

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 1 Then Exit Sub
    If .Row >= 4 Then Calendrier.Show 0
  End With
End Sub

remarque : dans ton post de 16:48, y'a un signe deux-points ( : ) en trop après Then ; tu as écrit :

If Not Intersect(Target, Range("A4:A1048576")) Is Nothing Then: Calendrier.Show 0

dhany

merci à toi

j'ai pas réussis à appliquer les deux condition

regarde

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim N&: N = Cells(Rows.Count, 1).End(xlUp).Row
    Me.Label1.Caption = "Le solde de votre compte est de " & Format(Application.Sum(Range("E4:E" & N)) - Application.Sum(Range("D4:D" & N)), "# ##0.00 ?")

    With Target
        If .CountLarge > 1 Then Exit Sub
        If .Column <> 6 Then Exit Sub
        If .Row < 4 Then Exit Sub
        Application.EnableEvents = False
        .HorizontalAlignment = 3: .Value = "X"
        Application.EnableEvents = True
    End With

    With Target
        If .CountLarge > 1 Then Exit Sub
        If .Column <> 1 Then Exit Sub
        If .Row < 4 Then Exit Sub
        Application.EnableEvents = False
        Calendrier.Show 0
        Application.EnableEvents = True
    End With

End Sub

patiente un moment : je vais essayer de faire ta nouvelle demande.

dhany

voici ton fichier modifié :

70classeur1.xlsm (25.70 Ko)

tu as dupliqué le bloc With Target .. End With, qui apparaît donc 2× ; c'est plus compliqué que ça :

il faut combiner les différentes conditions, et un seul bloc With Target .. End With suffit.


tu verras aussi que le code VBA pour modifier le solde apparaît une seule fois. (il est appelé à 2 endroits différents)


pour la coche "X" en colonne F : si tu cliques dessus, elle est effacée (à condition qu'il y ait eu changement de cellule) ; ça permet de décocher si on change d'avis, ou pour corriger une erreur de coche ; si tu veux effacer la coche "X" alors que tu es déjà dessus (donc sans changement de cellule), alors appuie simplement sur la touche Suppr (Suppression) ; si au contraire tu es déjà sur une cellule vide de la colonne F et que tu veux y mettre une coche (donc là aussi sans changement de cellule), alors saisis simplement "X".

dhany

re dhany

grâce à toi mon projet avance très bien et vite, mille merci

à l'ouverture du fichier, vu que l'usf calendrier est pas ouvert ça plante ici ;

            Unload Calendrier

alors essaye cette nouvelle version :

27classeur1.xlsm (25.97 Ko)

dhany

THANK YOUUU

c'est parfait !!!!

je sais pas si je dois crée un sujet sur un problème de travaillé dessus

je souhaite écrire le montant du solde en rouge si négatif (seulement montant)

tu a écrit :

THANK YOUUU

c'est parfait !!!!

j'suis ravi qu'ça marche comme tu veux !


tu a écrit :

je souhaite écrire le montant du solde en rouge si négatif (seulement montant)

autre version du fichier :

17classeur1.xlsm (21.52 Ko)

comme j'ai ajouté en plus la ligne 3, dans le code VBA : remplacer 4 par 5 !

tu verras aussi que j'ai supprimé la sub ShowSolde() et ton Label1.

bien sûr, la sub Worksheet_Change() est devenue inutile : supprimée aussi.

c'est l'grand ménage, hein ?

dhany

merciiiii dhany

y'a pas d'quoi, c'est avec plaisir !

sauf si tu as autre chose à demander, merci de passer le sujet en résolu : clique sur à droite de (coin haut droit du post); ça permet aussi de clôturer le fil de la discussion (toi seul peut le faire, car c'est toi qui a créé ce sujet).

dhany

Bonjour,

Une autre proposition.

Cdlt.

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

Merci Jean Eric pour ce code qui fonctionne aussi parfaitement

Bonjour,

Faire simple est plus difficile que de faire compliqué (SteveJobs).

Cdlt.

Bonsoir Ronibo,

la solution de Jean-Eric est effectivement plus courte que la mienne, MAIS :

* 1er bug : on clique en A5 : le calendrier n'apparaît pas !

* 2ème bug : on clique en F5 : l'état de la cellule n'est pas modifié !

* 3ème bug : on clique en A6 (ou dessous) ➯ le calendrier apparaît : OK ; juste après, on clique en F6 (ou dessous) : le calendrier n'est pas refermé !

* 4ème bug (éventuel) : dans ce post, Ronibo a écrit : « à l'ouverture du fichier, vu que l'usf calendrier est pas ouvert ça plante ici : Unload Calendrier » ; j'avais corrigé ce problème, mais je pense qu'il risque de se produire avec le code VBA de Jean-Eric !

* même si Jean-Eric est fâché avec moi (et vice-versa), il aurait dû avoir la courtoisie d'indiquer qu'il a repris mon fichier pour te proposer une solution (c'est-à-dire le fichier où j'ai remplacé ton label par D2:F2 et G2) ; comme Jean-Eric lit presque tous mes posts, il ne pouvait pas l'ignorer.

* si Jean-Eric reprend mes solutions pour y inclure des bugs qui n'y sont pas, c'est pas la peine qu'il se dérange !


je sais très bien pourquoi les 2 premiers bugs de la soluce Jean-Eric se produisent : c'est à cause de sa ligne VBA :

If Target.CountLarge = 1 And Target.Row > 5 Then ; il aurait dû mettre >=5 ou >4

je lui laisse le soin d'expliquer lui-même la cause de son 3ème bug ; et si le 4ème bug se produit, à lui de l'arranger !

Jean-Eric a écrit :

Faire simple est plus difficile que de faire compliqué (SteveJobs).

effectivement, Jean-Eric en a parfaitement fourni la preuve !

dhany

Bonjour,

@Dhany,

C'est toujours un plaisir de te lire.

je suis en effet allé un peu vite dans cette réponse et j'en m'en excuse platement (auprès de Ronibo).

J'ai revu la procédure en conséquence. Nos 2 fichiers ont maintenant, semble-t-il le même comportement, et le même souci, lors de multiples sélections, si on veut pinailler.

Maintenant, si je suis intervenu, c'est en effet, après avoir vu ta proposition.

Elle m'a interpelée pour de nombreuses raisons :

1 - Une gestion d'erreur qui me semblait inutile

2 - Une procédure qui commence par 2 Exit Sub

3 - L'utilisation de EnableEvents

Cdlt.

Nota: Tout comme toi, je suis débordé !.Je ne donnerai pas de suite à ce message.

14ronibo-v2.xlsm (22.16 Ko)
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
Jean-Eric a écrit :

je suis en effet allé un peu vite dans cette réponse et j'en m'en excuse platement (auprès de Ronibo).

c'est bien, mais il aurait aussi pu s'excuser platement auprès de moi pour avoir repris ma solution sans me citer !

la prochaine fois qu'il reprendra une de mes solutions, j'espère vivement qu'il mettra une phrase du genre :

« je propose cette solution à partir de la solution de dhany » ; ou : « j'ai repris la solution de dhany »

ce n'est pas de la prétention de ma part, mais tout l'monde voudra bien admettre que c'est la moindre des choses de citer ses sources !


Jean-Eric a écrit :

Nos 2 fichiers ont maintenant, semble-t-il le même comportement, et le même souci, lors de multiples sélections, si on veut pinailler.

le « si on veut pinailler » est de trop, car lui non plus n'hésite pas à relever un point de détail, de temps à autres.

(surtout quand il lui arrive de relever un de mes posts ! )


dans mon prochain post, je vais répondre aux critiques de Jean-Eric sur mon code VBA.

dhany

Rechercher des sujets similaires à "fonction colonne"