XL 2016 Uniformiser la date des cellules

Phylo

XLDnaute Occasionnel
Bonjour

J 'ai crée un fichier excel qvec un code vba qui incorpore la date automatiquement
Mais vu que le fichier est utilisé par plusieurs personne. La date entrée est variable selon la date d' ordi de chaque personne

je veux insérer l'instruction dans ce code

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Columns("J")) Is Nothing And Target.Value <> "" Then
Target.Offset(0, 1).Value = Date & " " & Time
End If

'Dans les colonnes I et K la format de la date est : dd-mm-yyyy
exemple :
Columns()Numberformat="dd-mm-yyyy"


Merci d'avance
 

Pièces jointes

  • FOR-AQ release inbox 07-09-2020.xlsm
    765.1 KB · Affichages: 107
Solution
Mode:=1 est à préciser après une virgule à la fin d'une instruction CA.Add dans la Sub UserForm_Initialize.
Oui, elle ne gène pas, elle est là au cas où vous auriez besoin un jour de pouvoir en supprimer une. Ne serait-ce qu'à la suite d'un ajout avec une information erronée tapée dans une ComboBox.

Je joint mon classeur où j'ai déplacé un ou deux CA.Add pour qu'ils soient dans un ordre plus proche de celui des colonnes du tableau.

Dranreb

XLDnaute Barbatruc
Bonsoir.
Évidemment, mais c'est peut être de ma faute, à cause d'une faute d'orthographe qui était plus une étourderie. Je pensais avoir mis SonNom et non son SonNon, et il fallait bien sûr à chaque fois le remplacer par le nom du contrôle qui doit servir à afficher et modifier l'information de cette colonne. Mais je l'avais mis en italiques, ça aurait dû vous alerter.

Et toujours pas de référence à CLsCAS. Qu'est ce que vous attendez pour la cocher ?
1600540921566.png

Je suis surpris que vous ayez remplacé les TextBox des dates par des ComboBox
L'objet ControlsAssociés accepte 7 sortes de contrôles, le ComboBoxLiées n'accepte que les ComboBox.
 
Dernière édition:

Phylo

XLDnaute Occasionnel
Bonjour

Quand vous Auriez-vous un peu de temps pour jeter un coup d'oeil stp.
C'est urgent parcequ'on travaille systématiquement avec le fichier pour une tracabilité de nos activités.

juste pour te dire que j'ai ajouté une barre de recherche dans l'userforme comme la barre déja crée dans le fichier excel
Cordialement
 

Pièces jointes

  • FOR-AQ Release inbox 20-09-2020.xlsm
    811.1 KB · Affichages: 4
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
J'ai eu des problèmes d'accès à internet tout ce week-end, c'est pourquoi je n'ai pas pu répondre plus tôt.
Vous n'avez toujours pas remplacé les 'SonNom' par les noms des contrôles concernés (ComboBox et TextBox) .
Il n'y aura pas de barre de recherche. Ni d'ailleurs de recherche par Find. Ce sera inutile parce que l'objet ComboBoxLiées fait toujours ce qu'il faut pour retrouver la ligne chaque fois qu'on tape ou choisit quelque chose dans une ou plusieurs des ComboBox dont on lui a confié la charge.
 
Dernière édition:

Phylo

XLDnaute Occasionnel
Désolé
je viens de changer les sonnom avec le nom des controles
J'ai enlevé la barre de recherche dans l'userforme

par contre j'ai gardé la barre de recheche dans excel.
J'aurai besoin de cette barre de recherche parce qu'elle m'afiche les données dans l'userforme ou cas ou j'aurai besoin d'aporter des modifs et enregistrer par la suite

Elle me donne un apercu de toute la ligne a travers l'userforme

Merci
 

Pièces jointes

  • FOR-AQ Release inbox 21-09-2020.xlsm
    808.8 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
On fera ça autrement. Probablement une méthode dans l'UserForm pour lui demander d'afficher une certaine ligne ou bien qui fait rechercher au ComboBoxLiées le numéro PF Batch, et s'il n'existe pas, ce même numéro en tant que Vrac Batch. Ça irait, ou bien l'inverse, d'abord en tant que Vrac Batch ?
Il y a encore des erreurs de compilation. Faites Alt+DL pour les voir. Les mouvements au coup par coup entre cellules et contrôles seront appelés à disparaître complètement.
Pour vous donner un aperçu, la Private Sub CBnEffacer_Click() comportera en tout et pour tout une seule instruction: CL.Nettoyer. La plupart des autres procédures que la UserForm_Initialize auront en moyenne 6 ou 7 lignes pas plus. Ça m'intéresserait que vous mettiez ', Mode:=1" à la fin des Add des contrôles qui doivent changer la date des contrôles qui les suivent. Ça me permettrait de le faire dans une Sub CA.Change …
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour
Une possibilité pour votre recherche :
Dans Feuil6 :
VB:
Private Sub CBnRecherche_Click()
   Dim Cel As Range
   Set Cel = [Tsource[[ Vrac Batch]:[PF Batch]]].Find(What:=Me.TextBox1.Value, LookAt:=xlWhole)
   If Cel Is Nothing Then MsgBox "Numéro introuvable", vbInformation, "Recherche": Exit Sub
   UFmSaisie.AfficherCel Cel
   End Sub
Dans UFmSaisie :
VB:
Public Sub AfficherCel(ByVal Cel As Range)
   LCou = Cel.Row - CL.Lignes(1).Range.Row + 1
   TVL = CL.Lignes(LCou).Range.Value
   CL.ValeursDepuis TVL
   CA.ValeursDepuis TVL
   CBnAjout.Enabled = False
   CBnModif.Enabled = True
   Me.Show
   End Sub
 

Dranreb

XLDnaute Barbatruc
Comme vous êtes assez proche de ce qu'il fallait faire (à plein d'erreurs près, encore), voici les procédures les plus essentielles à mettre derrière pour un fonctionnement classique :
VB:
Private Sub CL_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
   If NbrLgn = 1 Then Exit Sub
   ReDim TVL(1 To 1, 1 To CL.Colonnes.Count)
   CA.ValeursDepuis TVL
   CBnAjout.Enabled = NbrLgn = 0 Eqv Complet
   CBnModif.Enabled = False
   LCou = 0
   End Sub
Private Sub CL_BingoUn(ByVal Ligne As Long)
   LCou = Ligne
   TVL = CL.Lignes(LCou).Range.Value
   CA.ValeursDepuis TVL
   End Sub
Private Sub CBnAjout_Click()
   CL.ValeursVers TVL
   CA.ValeursVers TVL
   CL.Lignes.Add.Range.Value = TVL
   CL.Actualiser
   End Sub
Private Sub CBnModif_Click()
   CA.ValeursVers TVL
   CL.Lignes(LCou).Range.Value = TVL
   End Sub
Private Sub CBnSuppr_Click()
   If MsgBox("Êtes-vous sûr de vouloir supprimer ça ?", vbYesNo + vbDefaultButton2, _
      Me.Caption & " — Supprimer") = vbNo Then Exit Sub
   CL.Lignes(LCou).Delete
   CL.Actualiser
   End Sub
 
Dernière édition:

Phylo

XLDnaute Occasionnel
Merci pour ton retour
J'ai introduit toutes les modifications que tu m'a demandé. Désolé de prendre de ton temps .

Merci pour la fonction AltDL. Il m'a aidé bcp
Pour la recherche dans Userforme, je n'ai pas compris le code comment on va faire la requette ? il s'agit d'un bouton de recherche.

STp Dranreb, j'ai besoin de ton expertise et ton aide pour me rectifier le code directement dans le fichier si ça vous dérange pas.

ci-joit la version améliorée
 

Pièces jointes

  • FOR-AQ Release inbox 21-09-2020.xlsm
    809.9 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
On progresse, on progresse. Mais il y a encore plein de titres de colonnes qui n'existent pas
Au bout d'un moment j'ai cessé de les mettre en commentaire en vue d'obtenir quelque chose qui tournait quand même … C'est presque toujours un question d'espaces en trop …
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je suppose que vous faites allusion seulement à la correction de la date par la Worksheet_Change. Je sais depuis longtemps que ce n'est pas possible. Il mettrait la date partout, puisque par l'UserForm on écrit toujours les ComboBox, même si leur valeur est la même qu'auparavant. Il vaut mieux qu'elle ne la change jamais quand c'est fait par l'UserForm. Par contre on pourrait faire en sorte que la date soit corrigée automatiquement dans la TextBox dès qu'on change la ComboBox. Mais en ayant testé une solution que j'envisageais pour cela, je me suis rendu compte d'un oubli dans la programmation des contrôles associés.
C'est corrigé dans cette version, à réinstaller, donc :
 

Pièces jointes

  • CBxLCtlA.xlsm
    149.6 KB · Affichages: 9
Dernière édition:

Dranreb

XLDnaute Barbatruc
La procédure suivante, à mettre de préférence derrière la CL_BingoUn fonctionne avec cette nouvelle version du CLsCAs :
VB:
Private Sub CA_Change(ByVal CAM As CLsCAs.CAsso)
   Dim CAsDate As CAsso
   If CAM.Mode And 1 Then
      Set CAsDate = CA.Item(CAM.Index + 1)
      If CAM.Valeur = TVL(1, CAM.Col) Then
         CAsDate.Valeur = TVL(1, CAsDate.Col)
      ElseIf IsEmpty(CAM.Valeur) Then
         CAsDate.Valeur = Empty
      Else
         CAsDate.Valeur = Date
         End If
      End If
   End Sub
Elle met la date du jour comme valeur du contrôle associé qui, dans les Add, en suit un qui a été spécifié avec une valeur impaire de Mode (Mode:=1 ou Mode:=3 par exemple).
Rappel: Mode est un argument facultatif de la méthode Add, simplement noté, non utilisé de façon spécifique par l'objet ControlsAssocié lui même.
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin