Relations entre textbox contenant une date et ligne d'une feuille de calcul [RESOLU]

djiwhy

XLDnaute Nouveau
Bonjour à tous,

Cela fait maintenant 3 jours que j'écume le web afin de trouver le moyen de créer une relation entre la valeur d'une textbox et d'autres textbox à mettre à jour. Je m'explique :

J'ai une feuille ("DonnéesRJ") dans le fichier-joint. Elle contient une base de données de champs que j'ai besoin d'alimenter via un formulaire nommé ("FormRapportJournalier"). J'ai dans le principe, trouvé la solution pour créer une nouvelle ligne à chaque nouvel enregistrement.

Mon problème est le suivant :
Ce formulaire sert à remplir un rapport journalier (donc 1 seul et unique par jour). Or, si je sélectionne une date dans le calendrier, il me créé un second enregistrement (une seconde ligne) avec la même date, d'où l'inévitable doublon.

Je voudrais donc :
1. Au clique sur une date, si une ligne de ma feuille contient déjà la même date, que le formulaire m'affiche les informations déjà enregistrées. M'évitant ainsi de recréer un nouvel enregistrement avec la même date.
2. Si la date n'existe pas dans la feuille, alors me laisser les champs "vides" pour les remplir.

J'ai trouvé sur ce forum bon nombres d'exemples (gestion de contacts, etc...) dont le fonctionnement s'approche de ce que je cherche mais je n'arrive pas à transposer ces fichiers au mien et à l'adapter.

Pour les utilisateurs d'Access, la date se trouve en faite la clé primaire de mes enregistrements, la référence si vous préférez. Mais il m'est impossible de faire cela sous Access (mon PC de bureau n'en dispose pas malheureusement).

A toute âme charitable dans la capacité de me fournir une piste ... Je suis preneur de tout ce qui pourra me faire avancer.

Petite précision, je n'ai pas pris le temps de donner de nom à toutes les textbox histoire de vous fournir un fichier le plus complet possible.

@ de lire vos conseils...
 

Pièces jointes

  • class escale.xlsm
    91.1 KB · Affichages: 66
Dernière édition:

PMO2

XLDnaute Accro
Re : Relations entre textbox contenant une date et ligne d'une feuille de calcul

Bonjour,

Essayez de changer votre code comme suit (les ajouts sont signalés par des ###)
Code:
Dim Ws As Worksheet

Dim DateExiste As Boolean   '### ajout pmo

' Code à exécuter à l'initialisation du formulaire
Private Sub FormRapportjourn_Initialize()
  Set Ws = Sheets("DonnéesRJ")
End Sub


' Association de la valeur du calendrier à aujourd'hui à l'ouverture du formulaire
Private Sub FormRapportjourn_Activate()
Calendrier = Date
End Sub

' Relation entre la valeur sélectionnée sur le calendrier et celle qui apparait dans la boite de texte
Private Sub Calendrier_DateClick(ByVal DateClicked As Date)

'### ajout pmo
Dim var As Variant
Dim i&
'---
DateExiste = False
txtboxdate = Calendrier
txtboxdate.Tag = CLng(Calendrier)
'---
var = Sheets("DonnéesRJ").[a1].CurrentRegion
For i& = 2 To UBound(var, 1)  'on part à 2 pour omettre la ligne de titre
  If var(i&, 1) = CDate(txtboxdate.Tag) Then
    DateExiste = True
    '---
    txtboxcommmatin = var(i&, 2)
    txtboxcommsoiree = var(i&, 3)
    txtboxpmric = var(i&, 4)
    '... à compléter par vos soins
    '...
    '...
    Exit For
  End If
Next i&
'---
If Not DateExiste Then
  txtboxcommmatin = ""
  txtboxcommsoiree = ""
  txtboxpmric = ""
  '... à compléter par vos soins
  '...
  '...
End If
'###

End Sub

Private Sub enregrapportjourn_Click()
    Dim L As Integer

    L = Sheets("DonnéesRJ").Range("a65536").End(xlUp).Row + 1 ' Pour placer le nouvel enregistrement à la première ligne de tableau non vide

'### ajout pmo
Range("A" & L).Value = CDate(txtboxdate.Tag)
txtboxdate.Tag = ""
'###

        Range("B" & L).Value = txtboxcommmatin

        Range("C" & L).Value = txtboxcommsoiree

        Range("D" & L).Value = txtboxpmric

        Range("E" & L).Value = txtboxpmrterhn

        Range("F" & L).Value = txtboxpmrterbn

        Range("G" & L).Value = TextBox1

        Range("H" & L).Value = TextBox3

        Range("I" & L).Value = TextBox2
        
        Range("J" & L).Value = TextBox4

        Range("K" & L).Value = TextBox5

        Range("L" & L).Value = TextBox6
        
        Range("M" & L).Value = TextBox7
        
        Range("N" & L).Value = TextBox8

        Range("O" & L).Value = TextBox9

        Range("P" & L).Value = TextBox10
        
    MsgBox ("Enregistrement effectué")

'    End If

End Sub

' Déchargement du formulaire en mémoire au clique sur le bouton Accueil
Private Sub menurapportjourn_Click()
Unload Me
End Sub

Private Sub txtboxdate_Change()

' Appliquer un format complet (Vendredi 1 Décembre 2015) dans l'affichage de la date
txtboxdate.Value = Format(txtboxdate.Value, "[$-F800]dddd dd mmmm yyyy")

End Sub
 

Pièces jointes

  • class escale_pmo.xlsm
    77.9 KB · Affichages: 61

djiwhy

XLDnaute Nouveau
Re : Relations entre textbox contenant une date et ligne d'une feuille de calcul

Alors mon sentiment est mitigé :

- D'une part, je suis déçu. Non pas par la solution apportée, mais déçu d'avoir perdu mon temps à chercher.

- D'autre part, je suis heureux. PARCE QUE CA FONCTIONNE DU TONNERRE !!! Enfin je vais pouvoir avancer dans mon petit projet perso, et ce, grâce à toi. Je ne pourrait pas te rendre la pareille, mais crois en ces quelques lignes, je t'en suis TRES TRES reconnaissant.

Même si de ce côté je ne pourrait pas autant jubiler d'avoir réaliser cela moi-même, il y a des moments où il faut le petit coup de pouce. Bon je reconnais, tu m'as plutôt filé un coup de pied au cul !

Allez une nouvelle fois merci à toi.

@++
 

djiwhy

XLDnaute Nouveau
Re : Relations entre textbox contenant une date et ligne d'une feuille de calcul

PAr contre petite remarque, est-ce normal que je ne puisse plus sauvegarder les enregistrements ?

J'obtiens un message d'erreur :
Erreur d'exécution '32809' : Erreur définie par l'application ou par l'objet

Avec pour ligne incriminée :
Code:
L = Sheets("DonnéesRJ").Range("a65536").End(xlUp).Row + 1

' Pour placer le nouvel enregistrement à la première ligne de tableau non vide

Je ne trouve pas la parade à cette foutue erreur !

Après s'il le faut j'ouvrirai un nouveau topic pour cela mais je me disait qu'en passant si t'avais du temps à tuer ... Avant que je ne me tue devant mon écran ;)

Merci encore
 

PMO2

XLDnaute Accro
Re : Relations entre textbox contenant une date et ligne d'une feuille de calcul [RES

Bonjour,

PAr contre petite remarque, est-ce normal que je ne puisse plus sauvegarder les enregistrements ?
Je n'ai indiqué qu'une piste à suivre.
C'est à vous d'envisager toutes les incidences que peuvent apporter les changements sur le comportement de votre programme et d'enrichir ou modifier ses instructions.

***
Par exemple, l'existence d'une date donne un numéro de ligne différent que celui obtenu par une nouvelle date. Il faut également effacer les saisies effectuées sur l'USF lors de l'enregistrement.
Code:
' Déclaration de la variable "Ws" comme alias de la commande Sheets("DonnéesRJ")
Option Explicit
Dim Ws As Worksheet

Dim DateExiste As Boolean   '### ajout pmo
Dim numLig&

' Code à exécuter à l'initialisation du formulaire
Private Sub FormRapportjourn_Initialize()
  Set Ws = Sheets("DonnéesRJ")
End Sub


' Association de la valeur du calendrier à aujourd'hui à l'ouverture du formulaire
Private Sub FormRapportjourn_Activate()
Calendrier = Date
End Sub

' Relation entre la valeur sélectionnée sur le calendrier et celle qui apparait dans la boite de texte
Private Sub Calendrier_DateClick(ByVal DateClicked As Date)

'### ajout pmo
Dim var As Variant
Dim i&
'---
DateExiste = False
txtboxdate = Calendrier
txtboxdate.Tag = CLng(Calendrier)
'---
var = Sheets("DonnéesRJ").[a1].CurrentRegion
For i& = 2 To UBound(var, 1)  'on part à 2 pour omettre la ligne de titre
  If var(i&, 1) = CDate(txtboxdate.Tag) Then
    DateExiste = True
    numLig& = i&
    '---
    txtboxcommmatin = var(i&, 2)
    txtboxcommsoiree = var(i&, 3)
    txtboxpmric = var(i&, 4)
    '... à compléter par vos soins
    '...
    '...
    Exit For
  End If
Next i&
'---
If Not DateExiste Then
  txtboxcommmatin = ""
  txtboxcommsoiree = ""
  txtboxpmric = ""
  '... à compléter par vos soins
  '...
  '...
End If
'###

End Sub

Private Sub enregrapportjourn_Click()
    Dim L As Long
    
'### ajout pmo
If txtboxdate.Tag = "" Then
  MsgBox "Une date n'a pas été précisée"
  Exit Sub
End If
'---
If DateExiste Then
  L = numLig&
Else
  L = Sheets("DonnéesRJ").Range("a65536").End(xlUp).Row + 1 ' Pour placer le nouvel enregistrement à la première ligne de tableau non vide
End If
'---
Range("A" & L).Value = CDate(txtboxdate.Tag)
txtboxdate.Tag = ""
'###

        Range("B" & L).Value = txtboxcommmatin

        Range("C" & L).Value = txtboxcommsoiree

        Range("D" & L).Value = txtboxpmric

        Range("E" & L).Value = txtboxpmrterhn

        Range("F" & L).Value = txtboxpmrterbn

        Range("G" & L).Value = TextBox1

        Range("H" & L).Value = TextBox3

        Range("I" & L).Value = TextBox2
        
        Range("J" & L).Value = TextBox4

        Range("K" & L).Value = TextBox5

        Range("L" & L).Value = TextBox6
        
        Range("M" & L).Value = TextBox7
        
        Range("N" & L).Value = TextBox8

        Range("O" & L).Value = TextBox9

        Range("P" & L).Value = TextBox10
        
    MsgBox ("Enregistrement effectué")

'### ajout pmo
Dim CT As Control
On Error Resume Next
For Each CT In Me.Controls
'  Debug.Print CT.Name & "    " & CT.Value
  CT.Value = ""
Next CT
'###

End Sub



' Déchargement du formulaire en mémoire au clique sur le bouton Accueil
Private Sub menurapportjourn_Click()
Unload Me
End Sub

Private Sub txtboxdate_Change()

' Appliquer un format complet (Vendredi 1 Décembre 2015) dans l'affichage de la date
txtboxdate.Value = Format(txtboxdate.Value, "[$-F800]dddd dd mmmm yyyy")

End Sub
 

Pièces jointes

  • class escale_pmo 2.00.xlsm
    76.9 KB · Affichages: 58

djiwhy

XLDnaute Nouveau
Re : Relations entre textbox contenant une date et ligne d'une feuille de calcul [RES

Je dois l'avouer, vos modifications comportaient des instructions que je ne connaissait pas. Je vais m'atteler à trouver ce que vos ajouts signifient pour en comprendre le fonctionnement et avancer.

Merci à vous je ne vous embête plus.
 

PMO2

XLDnaute Accro
Re : Relations entre textbox contenant une date et ligne d'une feuille de calcul [RES

Je dois l'avouer, vos modifications comportaient des instructions que je ne connaissait pas. Je vais m'atteler à trouver ce que vos ajouts signifient pour en comprendre le fonctionnement et avancer.
Merci à vous je ne vous embête plus.
Je ne le ferais pas si cela m'embêtait. En revanche, cela m'embête si mon apport est incompréhensible.
Il m'est difficile d'expliquer.

Essayez de dérouler le programme en pas à pas (touche F8) pour voir ce qui se passe..
 

djiwhy

XLDnaute Nouveau
Re : Relations entre textbox contenant une date et ligne d'une feuille de calcul [RES

Je ne le ferais pas si cela m'embêtait.
Je m'en doute bien, mais j'ai eu l'impression en demandant une nouvelle fois votre aide, d'abuser de votre sympathie.

En revanche, cela m'embête si mon apport est incompréhensible.
Il m'est difficile d'expliquer.
Alors je me suis mal exprimé, j'ai compris l'utilité des fonctions que vous avez ajouté, mais je ne connaissait ni ces fonctions, ni ces syntaxes. En revanche, j'ai compris ce qui manquait pour que cela fonctionne c'est déjà un bon début.

Essayez de dérouler le programme en pas à pas (touche F8) pour voir ce qui se passe..
J'explore, je ne connaissait pas cette fonction de VBE pourtant très utile. Merci.
 

Discussions similaires

Réponses
14
Affichages
515

Statistiques des forums

Discussions
312 083
Messages
2 085 175
Membres
102 807
dernier inscrit
Routier78