Remplir une colonne avec userform selon une date
Bonjour,
Je débute dans le VBA et je rencontre plusieurs problèmes sur mon tableau. J'ai construit un userform sur l'onglet "Janvier" et j'aimerais que les informations inscrites dans le userform remplissent la bonne colonne dans le bon onglet selon la date indiqué de la textbox 34 (date picker).Les numéro de ligne resteront donc les mêmes.
En suivant les cours VBA de excel-pratique, j'ai réussi à trouver (je pense) un début de réponse le mais je n'arrive pas à développer le raisonnementpour que le code fonctionne.
If Textbox34.value= cells(B2;AF2).select ThenEn bref, je n'arrive pas à retranscrire sous forme de code la phrase suivante.
" Si la date indiqué dans la textbox 34 correspond à une des valeurs dans la plage de donnée B2 à AF2(jour) et dans les ongletsJanvier à Décembre, alors retranscrit les valeurs des textbox 1/2/3/8/9/14/15/20/21/26/28/27/29/31/30/30 dans la colonne de la cellule et dans l'onglet qui est similaire à la date indiqué par la textbox 34"
Mais cela, me fait me poser des questions sur plusieurs points.
Comment, la code va interpréter le format JJ/MM/YYYY du date picker dans la textbox34 ?
Est-ce que le code va pouvoir analyser le jour puis le mois pour savoir dans quel onglet et quel colonne retranscrire les données ?
En espérant avoir été clair.
Merci à vous
Bonjour Robin,
Comme je le dis souvent,
sur Excel quand on parle de dates, on doit les saisir en entier dans les cellules et non pas juste le jour
Il suffit de mettre la première, tout le reste en découle simplement
Sinon, je n'ai pas de DatePicker sur mon poste (O365 64 bits)
Mais un DatePicker retourne un numéro de série, il faut donc récupérer le mois et le jour de ce numéro
Ce qui donnerait quelque chose comme
Private Sub CommandButton1_Click()
Dim MaDate As Date
Dim TabMois() As String, NomFeuille As String
Dim MaCol As Long
MaDate = Me.DtPicker1.Value
TabMois = Split("Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre", ",")
NomFeuille = TabMois(Month(MaDate) - 1)
MaCol = 1 + Day(MaDate)
With ThisWorkbook.shees(NomFeuille)
.Cells(4, MaCol).Value = Me.TextBox1.Value
' Etc...
End With
End SubA+
J'ai décidé de retirer le date picker car je suppose que si on export le fichier sur un autre poste, tout plante.
J'ai donc trouvé une formule pour avoir le format date dans une text box.
Private Sub TextBox33_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 8 Then
If Right(TextBox33, 1) = "/" Then TextBox33 = Mid(TextBox33, 1, Len(TextBox33) - 1)
ElseIf KeyCode = 46 Then TextBox33 = ""
End If
End Sub
Private Sub TextBox33_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode < 96 Or KeyCode > 105 Then
If TextBox33 <> "" Then TextBox33 = Left(TextBox33, Len(TextBox33) - 1)
End If
Select Case Len(TextBox33.Text)
Case 2: If Val(TextBox33.Value) > 31 Then TextBox33.Value = "": MsgBox "jour trop grand" Else TextBox33 = TextBox33 & "/"
Case 5: If Mid(TextBox33, 4, 2) > 12 Then TextBox33.Value = Mid(TextBox33, 1, 3): MsgBox "mois trop grand" Else TextBox33 = TextBox33 & "/"
Case 10: If Not IsDate(TextBox33) Then MsgBox "Date invalide" & vbCrLf & " Veuillez saisir une date existante": TextBox33 = ""
Case 11: TextBox33 = Mid(TextBox33, 1, 10)
End Select
End SubDonc, si j'ai bien compris ton code
Private Sub CommandButton1_Click()
'Les 3 fonctions DIM permettent d'attribuer une fonction à un nom personnalisé'
Dim MaDate As Date
Dim TabMois() As String, NomFeuille As String 'Je n'ai pas compris quel nom de feuille je dois renseigner ici'
Dim MaCol As Long
'Les 4 fonctions suivantes permettent d'associer les mots définis à des actions'
MaDate = Me.DtPicker1.Value 'Comme je n'ai plus de datepicker, je dois faire Madate = Me.textbox33.value ?'
TabMois = Split("Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre", ",")
NomFeuille = TabMois(Month(MaDate) - 1)
MaCol = 1 + Day(MaDate)
With ThisWorkbook.shees(NomFeuille) 'Je n'ai pas compris quel nom de feuille je dois renseigner ici'
.Cells(4, MaCol).Value = Me.TextBox1.Value
.Cells(6, MaCol).Value = Me.TextBox2.Value
.Cells(7, MaCol).Value = Me.TextBox3.Value
.Cells(11, MaCol).Value = Me.TextBox8.Value
.Cells(12, MaCol).Value = Me.TextBox9.Value
.Cells(16, MaCol).Value = Me.TextBox14.Value
.Cells(17, MaCol).Value = Me.TextBox15.Value
.Cells(21, MaCol).Value = Me.TextBox20.Value
.Cells(22, MaCol).Value = Me.TextBox21.Value
.Cells(25, MaCol).Value = Me.TextBox26.Value
.Cells(27, MaCol).Value = Me.TextBox28.Value
.Cells(28, MaCol).Value = Me.TextBox27.Value
.Cells(30, MaCol).Value = Me.TextBox29.Value
.Cells(32, MaCol).Value = Me.TextBox31.Value
.Cells(33, MaCol).Value = Me.TextBox30.Value
.Cells(35, MaCol).Value = Me.TextBox32.Value
End With
End SubJ'ai ajouter des annotations pour être sur que j'ai bien tout compris.
En tout cas merci pour ton aide, j'apprends énormément de ton code et de la logique qu'il y a derrière.
Robin,
Très bien pour la suppression du DtPicker, tu auras moins de soucis dans le futur
Ci-joint ton fichier avec les modifications
- Modification des formules pour les numéro de jour et les jours ne texte
- Modification des formules dans ta récap, juste besoin d'un copier coller et modification de la cellule contenant le mois
- Ajout d'un calendrier pour le chois de la date (c'est plus pro
- Modification du code
J'ai essayé de mettre un max de commentaires, pour la compréhension
A+
Ouah ! Alors que dire, déjà merci beaucoup pour toutes ces modifications et ces commentaires. Ton aide dépasse largement mes espérances !
Je suis encore en train de lire en boucle pour ton comprendre à la perfection. Le but étant de reproduire quelque chose de similaire sans aide pour progresser!
Merci encore !