Tracabilité important

Bonjour

J'ai l'honneur sur demande de ma direction d'étudier une main courante (électronique comme ils disent Lol) pour mon service.

Après multiples recherches, le fichier est déjà bien avancé mais j'arrive à un point ou je commence à être un peu perdu et donc

à avoir besoin d'aide. plus de détails sont dans le fichier.

J'espère être le plus précis dans mes explications si ce n'est pas le cas dites le moi.

J'avoue pour le moment pour un débutant m'avoir pas mal débrouillé, est il possible d'améliorer, afiner mes montages ?

essayons d'expliquer le fonctionnement au mieux , à l'ouverture du fichier :

je complète l'heure de début en G4,

les personnels, poste avec leurs heures de A8 à E19,

les niveaux sécu de G8 à H10,

coche les cases à cocher (partie Equipement).

double click en colonne A à partir de la ligne 22 pour afficher l'heure.

click sur le grand bouton vert, un formulaire s'ouvre qui permet de renseigner les évenements, l'heure de fin, l'éditeur et le n° de msg.

Jusque la je pense que ça va !!

Je souhaiterai si possible à l'ouverture

  • La date en C4 mis automatiquement (j'ai pas arrivé à faire)
  • Les case à cocher soient vide (pas arrivé à faire)
Puis au niveau des messages validé avec le formulaire

- à partir de A26, ajouter le format (c'est à dire les bordures) à chaque évenement . Sur ce point si c'est possible j'aimerai mettre à partir de A28 quelques lignes appelé "Consignes" en espèrant que cela ne gène pas pour les évenements (format).

Il y a d'autres points encore à voir mais pour le moment ça sera tout.

Désolé également si je déroge à la règle, j'ai hésité à faire un post sur un seul sujet ou expliquer plus largement le déroulement !!! j'ai donc choisis la seconde méthode pensant que ça serai peu être mieux pour vous pour la construction des formules.

Merci d'avance de prendre de votre temps pour les autres.

Cdlt à vous.

Bonjour,

Voici ton fichier en retour.

Pour "décocher" les case à cocher à l'ouverture, il suffit de les relier à la cellule située dessous.

Je te l'ai fait pour une case à cocher (la 6 il me semble).

Pour faire ça :

  • clic droit sur la case à cocher / Format de contrôle
  • Onglet Contrôle mettre l'adresse de la cellule concernée dans "Cellule Liée"
  • OK
  • mettre un format couleur du texte blanc et fond blanc dans cette cellule.

La macro à l'ouverture du fichier qui va gérer ça est dans le Module ThisWorkBook, l'événement Open.

Fait la même chose pour les autres cases à cocher.

Dans ce même module, même événement tu trouveras le code pour insérer la date...

Pour les bordures et pour les consignes, il te suffisait d'insérer une ligne après la dernière saisie.

C'est fait également.

Je n'ai pas compris ce que tu souhaites faire avec le "texte de tes cases à cocher"...

Re-

tu avais un gros souci au niveau de ta procédure temps. Elle ne s'arrêtait pas, même après fermeture de l'userform.

Je t'ai donc réglé ce souci à l'aide d'une nouvelle variable Public (cf Module1) Arret As boolean.

Lors du QueryClose de l'userform, Arret se place à True.

Dans la procédure temps, j'ai ajouté la ligne :

' Si Arret est True alors on quitte :
If Arret Then Exit Sub

J'en ai profité pour finir tes cases à cocher.

Elles se vident lors de l'ouverture et leur texte est "copié" depuis la feuille Configuration.

Voilà voilà...

Bonjour pijaku

merci d'avoir pris ton temps pour mon post je vais regarder à tout ça et toutes mes excuses pour les multiples demandes mais il y plusieurs choses à affiner pour le départ afin de mieux continuer ensuite. (ça fais un peu brouillon, )

je reviens des que possible te dire apres essais.

Cdlt.

Re pijaku

Je viens de regarder tes propositions, j'en suis content, on avance grâce à toi.

  • Pour les cases à cocher excellent c'est bien mon attente idem pour le texte.
  • Pour l'horloge dans le formulaire, elle fonctionne à la 1ère ouverture puis aux prochaines ouvertures du formulaire elle n'apparait plus.
  • pour l'ajout de ligne cela me décale tout, j'ai fais un exemple à la date d'aujourd'hui pour voir ce que ça fais puis mis quelques détails explicatif de ce que j'imagine comme présentation mais cela reste bien entendu qu'une idée.

encore merci à toi, j'essai t'avancer de mon côté également.

Cdlt

Bonjour,

compteur

Si Arret = True, le compteur ne se lance plus.

 If Arret Then Exit Sub

Donc, à chaque lancement, par toi, de la procédure temps, il te faut initialiser la variable Arret à False.

Pour cela, il te suffit d'ajouter, dans la procédure événementielle Initialize de ton Userform la ligne :

Arret = False

Soit :

     'INITIALISATION A L'OUVERTURE
Private Sub UserForm_Initialize()
Arret = False
temps
With Sheets("Configuration")
    ComboBox1.List = .Range("NOM").Value
End With
With Sheets("Main-Courante")
    Label2 = Feuil1.[J65536].End(3).Value + 1
End With
TextBox2 = Date
'TextBox2 = TextBox1
End Sub

On arrête le compteur, en quittant l'Userform, soit dans l'événement QueryClose :

Private Sub UserForm_QueryClose(Cancel As Integer, closemode As Integer)
On Error Resume Next
Arret = True
'Application.OnTime tps, "temps", , False
End Sub

double clic dans la colonne A

Le double clic dans la colonne A inscrit l'heure. OK, mais il ne faut pas que cela soit valide dans toute la colonne A.

Pour cela, j'ai écrit, en Cellule A30 le mot consignes en blanc sur fond blanc, ceci afin de servir de "borne basse". La première cellule étant la cellule A22. Ta procédure Worksheet_BeforeDoubleClick devient donc :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rng As Range, LgFin As Integer
    Set rng = Columns(1).Cells.Find("consignes")
    If Not rng Is Nothing Then LgFin = rng.Row - 1
    If Target.Column = 1 And Target.Row >= 22 And Target.Row <= LgFin Then Target.Value = Time: Cancel = True
End Sub

ajuster hauteur lignes

serait il possible d'ajuster en hauteur la partie "évenement" par rapport à la quantité de texte

écrit (renvoie à la ligne).

Pour cela, utilises l'enregistreur de macros et vois ce qu'il te donne comme code.

L'insertion d'une ligne :

Il te faut, si la cellule ou tu double clic est située deux lignes au dessus de celle contenant le mot "consignes" en blanc, insérer des cellules et les mettre en forme.

Pour cela, modifie une fois de plus ta procédure Worksheet_BeforeDoubleClick.

Au final, celle-ci devrait être comme ceci :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rng As Range, LgFin As Integer
    'on recherche le mot "consignes" colonne A
    Set rng = Columns(1).Cells.Find("consignes")
    'si "consignes est situé deux lignes plus bas
    If Target.Row = rng.Row - 2 Then
      '=> on insère une ligne
       Range("A" & Target.Row + 1 & ":J" & Target.Row + 1).Insert Shift:=xlDown
       'copié/collé pour la mise en forme
       Range("A" & Target.Row & ":J" & Target.Row).Copy Range("A" & Target.Row + 1 & ":J" & Target.Row + 1)
    End If
    If Not rng Is Nothing Then LgFin = rng.Row - 1
    If Target.Column = 1 And Target.Row >= 22 And Target.Row <= LgFin Then Target.Value = Time: Cancel = True
End Sub

Bonjour pijaku

Merci pour ton aide et tes conseilles, je vais essayer tout ça tranquillement et calmement.

J'ai bien tenté des choses de mon côté après des recherche d'exemples sur le forum mais n'étant pas très doué dans la construction des formules, bien évidemment j'ai fais des conner.... s, Mais je persiste.

J'aimerai mener à bien ce projet car nous sommes 2 sur cette étude, alors je vais faire doucement mais surement.

encore grand merci

Cdlt

Re

Venant de passer quelques temps à remettre les formules à jour et analyser un peu tout cela, je trouve que ça a l'air bien, sauf qu'une fois les MAJ effectuées quand j'ai voulu ouvrir l'USF (bouton vert) celui ci m'indique une erreur 400 (1ère fois que je vois ça !!!) je sais pas toi ?, suivi de Erreur d'exécution '1004' : erreur définie par l'application ou par l'objet. Donc je n'ai pas pu effectuer d'essais comme j'aurai voulu. J'ai rempli en manuel pour faire quelques essais.

Sinon, le principe d'ajout de ligne avec le mot "consigne" en A30 est très ingénieux, j'adore cette idée. en plus j'ai vu que tu avais pris de l'avance sur mes boutons sur l'USF pour le "rouge", "gras", italique", ect.... Merci.

Reste pour moi à essayer de trouver le principe pour ajuster la hauteur de cellule par rapport au texte écrit.

Dans la continuité, si les évènements atteignent plusieurs dizaine de lignes, mon idée est de retrouver comme présentation de base celle actuelle de la feuille "Main-Courante" à chaque ouverture du fichier et quand je ferai la clôture de la journée (bouton rouge) puis en faisant "Clôturer la journée" serait de copier et enregistrer vers un fichier appelé Archives M-C.

J'ai bien commencer des formules dans Module 1 mais bien évidemment je n'arrive pas à affiner tout cela. . en plus que maintenant avec le mot consignes en A30 qu'il faut garder à tout prix je suis un perdu.

Je te mets le fichier en PJ en cas de besoin

Merci

Cdlt

Bonjour,

Je vais regarder ton histoire d'archivage dans la journée.

Mais revenons en à ton histoire d'erreur 400.

Le site d'aide en ligne MSDN nous dit à ce sujet :

Formulaire déjà affiché ; impossible de l'afficher sous forme modale

voir ici les codes d'erreurs : https://msdn.microsoft.com/fr-fr/library/ms234761%28v=vs.90%29.aspx

Cela signifie donc que tu as un souci au niveau de l'affichage de ton UserForm.

Un simple coup d'oeil, sans connaitre ton fichier, à la procédure Initialize de ton UserForm nous donne la réponse...

With Sheets("Configuration")
    ComboBox1.List = .Range("Lidte_Nom").Value
End With

La programmation, y compris en VBA, ne souffre d'aucune approximation. Une simple petite erreur de saisie suffit à planter le tout.

Ici, il te suffit de remplacer Lidte par Liste et le tour est joué, tu peux continuer à travailler...

Pour l'archivage dans le classeur , à condition que les deux classeurs soient dans le même répertoire (sinon adapter le nom du chemin). La macro fin_service devient :

Sub fin_service()
Dim monClass As Workbook, Chemin AS String
    Set monClass = ThisWorkbook
    Chemin = monClass.Path
    Application.EnableEvents = False
    [B65536].End(xlUp)(2).Select
    ActiveCell = "Fin de service"
    Call ligne
    With monClass
        Workbooks.Open Chemin & "\Archives M-C.xlsx" 'A ADAPTER !!!!!
        .Sheets("Main-Courante").Copy after:=Workbooks("Archives M-C.xlsx").Sheets(1)
    End With
    ActiveSheet.Name = Format(Date, "dd-mm-yy")
    [C4] = Date
    ActiveSheet.Protect Password:="1234"
    Workbooks("Archives M-C.xlsx").Close True
    monClass.Sheets("Main-courante").Activate
    [A8:E19,G4:H4,G8:H10,A22:J29].ClearContents
    [F12:F13,H12:H13,F15:F19,H15:H19] = False
    Application.EnableEvents = True
End Sub

Bonjour

Mais !!!!!!! quelle erreur stupide.... pourquoi ne l'ai je pas vue alors qu'elle était simple. La je m'en veux.

Merci pour le lien concernant les erreurs, cela peut être très utile.

Après correction, l'USF s'ouvre parfaitement maintenant puis la "fin de service" est en place également mais certainement à affiner plus tard. Cela m'a amener à faire quelques modifs comme :

  • supprimer l'ajout de ligne dans la macro du CommandButton1 du formulaire.
  • ajouter l'ouverture de l'USF au double click dans la colonne A.

Quand j'ajoute des lignes pour écrire des évènements (par ex : A22:J60), on valide la fin de service l'enregistrement s'effectue mais la main courante qui revient vierge reste avec le même nombre de lignes (A22:J60).

Serait il possible à la suite de cet enregistrement quand on reviens sur la main courante de retrouver que les lignes A22:J29 vider ainsi que la partie consignes qui se vide aussi ?? en faisant attention de ne pas effacer la cellule A30 ou ce trouve le mot "consignes".

J'espère être clair dans mes explications !! sinon dit le moi.

Grace à toi j'aime assez bien la tournure de présentation que cela prend.

Grand grand merci

Cdlt

Bonjour,

la main courante qui revient vierge reste avec le même nombre de lignes (A22:J60)

Alors, simplement, on va supprimer les lignes indésirables à partir de la ligne 30 (la ligne 29 étant utile!). On va encore se servir du mot "consignes" pour déterminer qu'elle est la dernière ligne à supprimer, soit la ligne juste au dessus de celle ou on va trouver ce mot.

Sub Suppr_Lignes()
Dim rng As Range, LigFin As Integer
With Sheets("Main-Courante")
   Set rng = .Columns(1).Cells.Find("consignes")   'trouver "consignes" en colonne A
    If Not rng Is Nothing Then LigFin = rng.Row - 1 'Dernière ligne à supprimer
'si LigFin > 29 on supprime à partir de la ligne 30 jusqu'à la ligne précédent le mot "consignes"
    If LigFin > 29 Then .Rows(30 & ":" & LigFin).Delete
End With
End Sub

Bonjour

J'essais ça des que possible, mais à 1ère vue cela ma l'air génial.

A bientôt

Re

Suite à multiples essais, tout cela à l'air de bien fonctionner. La présentation me plais beaucoup et dans mes idées j'espère rester le plus simple possible.

Le fichier avance bien et en plus petit secret Lol je crois que mon fichier est mieux que celui de mon collègue, hihi.

Si cela ne te dérange pas il y a encore quelques ajustements à effectuer comme :

  • ajustement de la hauteur des cellules fusionnées (B à G) en relation avec le TextBox3 validé par le CommandButton1 de l'USF. (dont j'ai trouvé un exemple de macro "plus bas" mais n'arrive pas à l'adapter, bien évidemment !!!)
  • A l'aide des boutons (police rouge, gras, italique, ect...) dans l'USF, serait de pouvoir sélectionner dans la textbox3 tout ou une partie de texte et de pourvoir le mettre en Rouge, Gras par exemple, ou que italique, ECT..... et évidemment de récupérer tout cela sur la main courante.
  • D'avoir dans la partie Tâches journalières, les tâches correspondante à la date du jour par rapport à la feuille Tâches ou elles seraient programmées à l'avance.
Voilà un peu mes idées de fonctionnement et présentation pour la suite.

Macro pour ajuster hauteur ligne

Sub AutoFitMergedCellRowHeight(Plage As Range)

  Dim PlageSource As Range
  Dim PlageCible As Range
  Dim Compteur As Long

Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim CurrCell As Range
Dim ActiveCellWidth As Single, PossNewRowHeight As Single

 If Plage.MergeCells Then
   With Plage.MergeArea
     .WrapText = True 'enclenche le renvoi à la ligne automatique (modif fs)
     If .Rows.Count = 1 Then ' Dans le nouveau contexte c'est inutile mais je l'ai laissé
       Application.ScreenUpdating = False
       CurrentRowHeight = .RowHeight
       ActiveCellWidth = TextBox3      '''Plage.Range("A1").ColumnWidth ' Prend en compte la largeur de la cellule la plus à gauche de la plage

      MergedCellRgWidth = Plage.Width ' Prend en compte la largeur totale de la plage

      .MergeCells = False ' Défusionne les cellules pour ajuster le texte
      .Cells(1).ColumnWidth = MergedCellRgWidth ' Affecte la largeur totale de la plage originale à la seule première cellule
      .EntireRow.AutoFit ' Effectue le dimensionnement suivant le contenu
       PossNewRowHeight = .RowHeight
      .Cells(1).ColumnWidth = ActiveCellWidth ' Ramène la largeur de la première cellule à sa valeur originale
      .MergeCells = True ' Refusionne
      .RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, CurrentRowHeight, PossNewRowHeight) ' Ajuste la hauteur 
      Application.ScreenUpdating = True
     End If
   End With
 End If

 ' On copie chaque cellule de la plage vers la destination
  For Compteur =  TextBox3   '''1 To NbCellules
    Set PlageCible = Feuil1.Range("B" & (6 + Compteur))
    PlageCible = TextBox3   '''PlageSource.Range("A" & Compteur)
    AutoFitMergedCellRowHeight PlageCible
  Next

End Sub

Quel bricoleux que je fais .

Cdlt pompaero

Bonjour,

Mon classeur de test n'étant plus à jour, peux tu me faire passer le tien stp?

Bonjour

voici le classeur

Pour la hauteur de ligne, c'est fait.

Pour le reste, si tu veux mettre en forme une partie du texte seulement, c'est impossible dans un TextBox. Il ta faudrait pour cela, utiliser un contrôle Rich TextBox...

A toi de voir si le jeu en vaut la chandelle.

Ben oui, si tu ajoutes un contrôle supplémentaire comme le rich textbox, il te faudra également l'installer sur toutes les machines qui utiliseront ton fichier.

Re

Le principe à l'air de fonctionner.

Pourquoi la colonne B est elle masqué ? est ce normal ? car les boutons se superpose et cela m'obligerai a changer la présentation.

Pour les boutons (police rouge, gras, ect.... ) si cela n'est pas possible avec un textbox (chose que j'apprend) alors laisse tomber ça n'en vaut pas la chandelle comme tu dit. Je ferai directement les mis en forme dans la main courante une fois le texte validé.

Bonjour,

1- la colonne B est masquée parce que tu l'a masquée.

2- Quand je dis ça n'est pas possible, c'est faux. On peux faire ce que tu souhaites.

Cela demande toutefois une gymnastique assez ardue en terme de programmation.

J'explique :

Pour formater une cellule à partir d'un textbox, il suffit, lors du formatage dans le textbox d'insérer des balises.

Ainsi, si tu inscrit "Bonjour vous tous, comment ça va?" dans le textbox, que tu sélectionnes "comment" et que tu cliques sur Rouge, le texte ne se met pas en rouge dans le textbox mais apparait comme ceci :

"Bonjour vous tous, <R>comment</R> ça va?"

ça je sais faire.

exemple :

   'CLIC SUR ROUGE
Private Sub CommandButton8_Click()
With Me.TextBox3
   If .SelStart = Len(Me.TextBox3) Or .SelLength = 0 Then
      MsgBox "Veuillez sélectionner le texte à formater."
   Else
      .Value = Format_Txt(.Value, "R", .SelStart, .SelLength)
   End If
End With
End Sub
Function Format_Txt(Quoi As String, Comment As String, S As Integer, L As Integer) As String
Format_Txt = Left(Quoi, S) & "<" & Comment & Mid(Quoi, S + 1, L) & "/" & Comment & ">" & Right(Quoi, Len(Quoi) - (S + L))
End Function

Pour le transfert des données dans la cellule, ce n'est pas beaucoup plus compliqué, il suffit d'utiliser :

Dim Debut AS Integer, Longueur As Integer
'Calcul du début et de la longueur
ActiveSheet.Cells(vLign, 2).Characters(Start:=Debut, Length:=Longueur).Font

Le plus complexe est de permettre l'imbrication des balises.

Exemple pour du Rouge, Gras, Italique :

"Bonjour vous tous, <R><G><I>comment</I></G></R> ça va?"

Là ça se complique.

D'où mon "Le jeu en vaut-il la chandelle?".

Maintenant, si tu le choisis, on peut le faire.

Il me faut te prévenir que ce ne sera pas immédiat...

Tu dis

Bonjour

Colonne B masquée !! ce n'est pas ce que je souhaitais "erreur de ma part" désolé !! alors je vais essayer de trouver ou cela se passe et modifier,

Je t'avoue que la pour moi ça deviens technique et commence à mis perdre mais j'essai de m'accrocher aux branches..

Concernant le "rouge, gras, ect..." pourquoi pas le tenter mais la question que je me pose est : est ce que cela ne va pas alourdir le dossier ? si non, ben allons y, puis je te rassure tu peux prendre ton temps.

Je vais tenter de poursuivre mes recherches pour continuer l'aménagement et fonctionnement du fichier.

Merci pour tes conseils

Cdlt.

Rechercher des sujets similaires à "tracabilite important"