Ouverture impromptu d'userform

Bonjour maître VBA

Je tente d'améliorer la version de ce classeur, et mes modifications changent le comportement de certaines macro!

Les utilisateurs naviguent sur les lignes avec le tabulateur passant d'une cellule à l'autre (de gauche à droit).

Or, quand ils arrivent à la colonne I, un userform s'ouvre pour faire un choix, l'utilisateur fait son choix, l'userform se ferme, et bascule à la ligne suivante pour poursuivre les demandes.

Si l'utilisateur a terminé, il ferme tout simplement le calendrier à partir du X.

Or, voilà le hiatus, quand on ferme le calendrier, c'est un autre userform qui s'ouvre, alors que cela ne devrait pas être le cas. (du moins, c'était le cas avant que j'apporte des modifications), et je n'en comprends pas la source.

Merci pour votre aide.

https://www.cjoint.com/c/GFcnxqS6dRq

VDMICHEL, le forum,

Quelques corrections et une amélioration (en colonne A, après le choix de la date, le jour de la semaine s'inscrit en B sans réécrire toute la colonne B, puis la cellule sélectionnée est celle de la colonne C).

Le Userform "List" ne s'ouvre plus sans raison.

J'ai mis en commentaire la ligne qui enregistre avec mot de passe.

Quand ton projet sera suffisamment avancé pour le mettre en production, il ne restera qu'à réactiver cette ligne.

À tester.

Ne pas oublier de faire des copies de sécurité.

La Céline

Bonjour laceline,

Bonjour le Forum,

Merci pour les améliorations. c'est grandement apprécié.

Sauf que le userform Liste doit pouvoir s'ouvrir (au clic dans la cellule) quand le type de comblement (l'userform Confirmation) est inscrit.

Pour être plus précis, la première séquence de fait par l'utilisateur 1: dans un premier temps, 1 inscrit la date, l'horaire et le type de comblement. En suite, l'utilisateur 2 vient traiter la demande de comblement en utilisant l'userfom Liste.

Je n'avais pas le bogue à la fermeture du calendrier dans l'ancienne version!

C'était le code que l'on retrouvait:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    adresse = Target.Address
    For i = 5 To 65536
        If adresse = "$A$" & i Then
            Calendrier.Show
            Cancel = True
            Exit For
        End If
    Next

    Range("A5:A65536").Copy Destination:=Range("B5:B65536")
    Range("B5:B65536").NumberFormat = "dddd"

If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("G5:G" & Range("B" & Rows.Count).End(xlUp).Row)) Is Nothing Then
Confirmation.Show
End If

If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("h5:H" & Range("B" & Rows.Count).End(xlUp).Row)) Is Nothing Then
Liste.Show
End If

End Sub

Bonjour laceline

ok, je viens de voir que dans mon ancien code la commande de Liste se déclenchait à la colonne G (maintenant I, mais ça devrait être plutôt H) sauf qu'en H j'aimerais pouvoir forcer l'inscription des initiales du requérant avant que l'userform Confirmation se déclenche! J'oubliais que j'avais ajouter la colonne Initiales!

Est-ce possible d'avoir deux commandes sur la même cellule successivement?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'ActiveSheet.Unprotect Password:="mlrc"
    adresse = Target.Address
    For i = 5 To 65536
        If adresse = "$A$" & i Then
            Calendrier.Show
            Cancel = True
            Exit For
        End If
    Next
''    Range("A5:A65536").Copy Destination:=Range("B5:B65536")
''    Range("B5:B65536").NumberFormat = "dddd"
    If Target.Count < 2 And Target.Column = 1 Then
        Cells(Target.Row, 1).Copy Destination:=Cells(Target.Row, 2)
        Cells(Target.Row, 2).NumberFormat = "dddd"
        Target.Offset(0, 2).Select
    End If

If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("F5:F" & Range("B" & Rows.Count).End(xlUp).Row)) Is Nothing Then
MsgBox ("Pour un quart de travail sans repas, inscrivez 0000.")
End If

If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("H5:H" & Range("B" & Rows.Count).End(xlUp).Row)) Is Nothing Then
MsgBox ("Incrivez vos initiales avant de poursuivre.")
End If

If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("H5:H" & Range("B" & Rows.Count).End(xlUp).Row)) Is Nothing Then
Confirmation.Show
End If

If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("I5:I" & Range("B" & Rows.Count).End(xlUp).Row)) Is Nothing Then
Liste.Show
End If

'ActiveSheet.Protect Password:="mlrc"
End Sub

VDMICHEL, le forum,

La colonne "Remarques" peut-être remplie par qui ? Utilisateur1 ? Utilisateur2? Ou les 2?

.. .dans un premier temps, l'utilisateur1 inscrit la date, l'horaire et le type de comblement.

En suite, l'utilisateur 2 vient traiter la demande de comblement en utilisant l'userform Liste. ...

Ce que j'en comprends, c'est que l'utilisateur1 ne devrait pas être en mesure d'utiliser l'userform "Liste". Est-ce bien cela ?

Dans l'affirmative, l'idéal serait de trouver une autre façon de déclencher l'userform "Liste".

LaCéline

Bonjour laceline

la colonne Remarque peut être utilisée par tous les utilisateurs tout comme l'userform la Liste.

La catégorie Tour 1 appartient à l'utilisateur 1, et les deux autres (24, -24) à l'utilisateur 2.

Merci encore pour votre aide.

VDMICHEL, le forum,

Je vais devoir m'absenter +/- 36 heures.

Je reviens.

LaCéline

VDMICHEL, le forum,

Une partie des obligations ont été annulées.

Je suis donc de retour,

Quelques améliorations :

  • les déplacements vers la droite se font comme à l'habitude par la touche TAB et maintenant par la touche Entrée aussi; pour les colonnes de a à i.
  • si la cellule B1 ne contient pas 2222, le formulaire "Confirmation" n'aura qu'un bouton " Tour 1 ".
  • à la fermeture, B1 sera effacé si on a oublié de le vider B1 pour l'utilisateur 1
  • si la cellule B1 contient 2222, le formulaire "Confirmation" aura ses 3 boutons.
  • si B1 ne convient pas, c'est modifiable.
  • si on clique dans la colonne A, pour appeler le calendrier, et que l'on est sur une ligne plus basse que la suivante de la liste, la sélection se placera automatiquement sur la ligne suivante de la liste.

Amélioration à apporter plus tard : ne pas laisser certaines cellules vides sur une ligne entre a et i. "j" étant en écriture optionnelle.

Pour alléger temporairement le chiffrier, j'ai effacé les formules de la ligne 2001 vers les bas.

À tester rigoureusement

LaCéline

Bonjour laceline et le Forum,

Merci encore de vous intéresser à mon projet!

En fait, l'userform Confirmation doit toujours avoir l'option des 3 boutons. Donc, le 2222 en B1 ne sera pas nécessaire... mais je conserve l'idée pour de futurs projets.

Le fait de pouvoir tomber directement sur la cellule disponible pour déclenché le calendrier est génial.

Pour poursuivre le développement du projet, je me permets de décrire à nouveau la séquence des utilisateurs, avec quelques nuances en plus:

Il y a deux unités d'affaires qui utilisent le classeur: les requérants (demandent un comblement) et les exécutants (traitent les demandes de comblement).

Il a trois de types de comblements: - de 24, + de 24, et Tour 1. Le traitement du tour 1 appartient aux requérants, et peuvent transformer le Tour 1 en À combler. Les requérant peuvent donc utiliser les userform Confirmation et Liste. Le traitement des - 24 +24 appartient aux exécutants et utilisent seulement l'userform Liste.

Dans un 1ier temp, le requérant inscrit sa demande (de A à I). En suite, l'exécutant indique l'état de la demande en utilisant l'userform Liste.

Ce qu'il reste à faire c'est forcer l'inscription de temps de repas (même s'il n'y en a pas=0000) et les initiales. J'aimerais que les requérants ne puissent pas passer à la cellule suivante si F et H ne sont pas remplis.

Aussi, après le choix le type de comblement, il ne faut pas que l'userform Liste de déclenche, mais plutôt un retour à la ligne pour poursuivre les demandes en commençant par le calendrier.

Du côté des exécutants, ils utilisent seulement l'userform Liste. Donc, lorsqu'ils clic dans la colonne I, seul l'userform Liste doit se déclencher, et ils n'ont pas besoin d'un retour à la ligne.

En espérant que ces menus détails illustrent mieux la séquence de saisie et d'exécution.

Merci pour tout.

VDMICHEL, le forum,

... Du côté des exécutants, ils utilisent seulement l'userform Liste. Donc, lorsqu'ils clic dans la colonne I, seul l'userform Liste doit se déclencher, et ils n'ont pas besoin d'un retour à la ligne ...

Comment fait-on pour savoir que c'est l'exécutant ou le requérant qui est derrière le clavier ?

LaCéline

Bonjour laceline,

Excellent point!

En fait, ils se distinguent par les actions qu'ils posent! Une seule personne à la fois dans le classeur, sinon il reste en lecture seule.

Chez les requérants (les bibliothèques=BQ), on a ajouté la colonne Initiale pour identifier la personne qui fait une demande. Et selon le type de comblement, la ligne et/ou certaines cellules de la demande se mettent d'une couleur. Les requérants sont de 2@3 personnes par bibliothèques.

Chez les exécutants, il n'y a que deux personnes qui traitent les demandes de comblement. Et selon l'action qu'elles posent, la ligne se colore pour distinguer l'état de la demande: jaune=la demande est en traitement; vert=la demande est comblée avec le nom du titulaire, etc.

En espérant vous éclairer.

Rechercher des sujets similaires à "ouverture impromptu userform"