Codes vba pour un bouton de commande [Résolu/Fermé]

Signaler
Messages postés
6
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
16 août 2013
-
Guerschomaly
Messages postés
6
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
16 août 2013
-
Bonjour

Je suis un débutant en programmation et un nouveau au forum, d'ou je demande d'avance votre indulgence pour toute éventuelle irrégularité.

j'ai créé un petit formulaire qui a deux textbox et un bouton de commande, les deux textbox me permettent de saisir la date du jour et l'évenement du jour et le bouton de commande devrait me permettre de les (la date et l'évenement) ajouter quotidiennement dans deux colonnes (Date: A et Evenement: G) d'un tableur excel (dont les cellules de autres colonnes qui contiennent les formules se remplissent automatiquement à partir des données d'une autre feuil) en commençant par leurs premières cellules vides A5 pour la date et G5 pour l'évenement, ces cellules ont été fusionnées et celles de la colonne date ont été renommées; Elles sont au total 35 cellules par colonne, celles de la colonne date renommées de RDAT1 à RDAT35. Après chaque 7 cellules pour les deux colonnes il y a une cellule déjà remplie pour le sous-total hebdomadaire.
Voici ci-après le code vba que j'ai écrit derrière le bouton de commande mais qui ne marche pas. J'ai besoin de votre aide

Private Sub CommandButton_Enregister_Click()

Feuil16.Activate

Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("RAPPORT")


'Trouve la premiere ligne vide
iRow = ws.Cells(Rows.Count, 1)
.End(xlUp).Offset(1, 0).Row


'Si le formulaire est complet, on insère les valeurs sur la feuille


ws.Cells(iRow, 1) = TextBox_Date_jour.Value
ws.Cells(iRow, 7) = TextBox_Evenement.Value


'Après insertion, on remet les valeurs initiales

Me.TextBox_Date_jour = ""
Me.TextBox_Evenement = ""


ThisWorkbook.Save

Unload Me


End Sub

3 réponses

Messages postés
7954
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
21 février 2020
1 297
Bonjour,

Ton code devrait fonctionner, Feuil16.Activate est inutile (si tu dois sélectionner la feuille, il vaut mieux ws.Activate près le Set) et iRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row doit être sur une ligne :
Private Sub CommandButton_Enregister_Click()
Dim iRow As Long
Dim ws As Worksheet

  Set ws = Worksheets("RAPPORT")
  
  'Trouve la premiere ligne vide
  iRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

  'Si le formulaire est complet, on insère les valeurs sur la feuille
  ws.Cells(iRow, 1) = TextBox_Date_jour.Value
  ws.Cells(iRow, 7) = TextBox_Evenement.Value

  'Après insertion, on remet les valeurs initiales
  Me.TextBox_Date_jour = ""
  Me.TextBox_Evenement = ""
  
  'ThisWorkbook.Save
  
  Unload Me

End Sub
Guerschomaly
Messages postés
6
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
16 août 2013

Merci Patrice pour ton assistance

Le code marche mais il se pose encore un problème, quand je valide en cliquant sur le bouton, les données sont bel et bien ajoutées sur la feuille mais pas dans le tableau alors que c'est seulement dans le tableau que je suis sensé enregistrer les données mais pas en dehors, je pense qu'il faut définir la plage dans les codes pour que les données soient seulement ajoutées dans les cellules concernées (les détails sur les cellules dans mon premier poste) tableau mais pas en déhors mais je n'arrive pas à le faire. Ce tableau doit contenir les données du rapport mensuel, qui comme je l'avais signalé dans mon premier poste y sont insérées automatiquement à partir d'une autre feuil.

Je compte encore sur votre assistance

Cordialement
Guerschom
Patrice33740
Messages postés
7954
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
21 février 2020
1 297
« mais pas dans le tableau » De quel tableau parles-tu ??? Où se situe-t-il ???

C'est pas clair du tout !!!
Guerschomaly
Messages postés
6
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
16 août 2013

Le tableau se trouve sur la feuille RAPPORT, au fait pour être plus explicit, il s'agit d'une petite base de données que j'ai créée en excel, le classeur a deux feuilles (POINTAGE et RAPPORT), la première feuille(POINTAGE) contient un tableau ou j'enregistre toutes les données à partir d'un formulaire de saisie, ici tout marche bien, aucun soucis.
Le problème se pause sur la deuxième feuille (RAPPORT), celle-ci contient un tableau pour le rapport mensuel, j'ai utilisé des formules excel pour que les informations de ce tableau s'ajoutent automatiquement en fonction des données enregistrées dans le tableau de la première feuille, sauf pour deux colonnes (Date et Evenement); d'ou, j'ai créé un autre petit formulaire pour me permettre d'inserer seulement la date et l'évenement du jour dans les deux colonnes (Date et Evenement) pour tout le mois.
NB: Le format du tableau du RAPPORT est déjà prédefini, le tableau a sept colonnes (de A à G) et 154 lignes, donc il occupe la plage de A1 à G154, c'est seulement cette plage qui m'interresse pas toute le feuille RAPPORT. Il faudra donc écrire les codes VBA derrière le bouton du formulaire de façon que les dates et evenements du jour soient inserées dans les cellules appropriées de deux colonnes concernées càd de A5 à A145 pour la colonne DATE et G5 à G145 pour la colonne EVENEMENT. Le code actuel ajoute les dates et les évenements sur la feuille mais pas dans le tableau, càd à partir de A155 et G155. Je n sais pas si c'est clair maintenant!

Merci de me faire votre feedback.
Messages postés
7954
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
21 février 2020
1 297
Bonjour,

C'est pas plus clair qu'avant !!!

« le tableau a sept colonnes (de A à G) et 154 lignes, donc il occupe la plage de A1 à G154» Jusque-là ça va !

Là ou c'est moins clair c'est :
« c'est seulement cette plage qui m'interresse pas toute le feuille RAPPORT. » ???
Je suppose que tu a voulu écrire :
« c'est seulement cette plage qui m'intéresse, pas toute le feuille RAPPORT. » avec une virgule !

Et encore :
« Le code actuel ajoute les dates et les évenements sur la feuille mais pas dans le tableau, càd à partir de A155 et G155 »
La aussi je suppose que c'est :
« Le code actuel ajoute les dates et les évènements sur la feuille à partir de A155 et G155, mais pas dans le tableau »

Alors dans ce cas, c'est que la plage de cellules A5:A154 n'est pas vide !!!
Peut-être y-t-il des formules ou des espaces ???

Cordialement
Patrice
Guerschomaly
Messages postés
6
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
16 août 2013

Oui, vous avez raison, c'est comme ça que je devais écrire.
Dans cette plage il y a effectivement des cellules qui ont des formules et des espaces.

Cordialement
Guerschom
Patrice33740
Messages postés
7954
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
21 février 2020
1 297
Comment peut-on savoir où il faut écrire ???
Est-ce en fonction du résultat des formules ???
Ou suffit-il au début de l'opération d'effacer la zone ?
Ou .... ???
Guerschomaly
Messages postés
6
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
16 août 2013

les cellules de deux colonnes ou il faut enregistrer les données sont vides, pour la colonne Date, la première cellule vide c'est A5 et pour la colonne Evenement, la première cellule vide c'est G5
Messages postés
7954
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
21 février 2020
1 297
Bonjour,

Ne ne comprend plus :
- d'un coté a propos de ma réponse «la plage de cellules A5:A154 n'est pas vide » tu dis que « Dans cette plage il y a effectivement des cellules qui ont des formules et des espaces » . Ce qui explique parfaitement le fait que « Le code actuel ajoute les dates et les évènements sur la feuille à partir de A155 et G155, mais pas dans le tableau ».
- et maintenant tu réponds « les cellules de deux colonnes ou il faut enregistrer les données sont vides, pour la colonne Date, la première cellule vide c'est A5 ... »

Il faudrait savoir : soit elles sont vides et il n'y a rien dedans, ni formule ni espace, soit elles ne sont pas vides !!!

Dans le cas où les cellules sont vides, il n'y a aucune raison pour que la macro proposée, ne fonctionne pas.

Et dans le cas où elles ne sont pas vides, il est normal que la macro écrive sur la première cellule non vide (en A155) !
Guerschomaly
Messages postés
6
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
16 août 2013

Bonjour

J'ai trouvé une solution, il était seulement question de définir la plage ou inserer les données, ci-dessous, le code vba que j'ai écrit, il marche sans problème.

Private Sub CommandButton_Enregister_Click()

        Feuil16.Activate
        
        Dim iRow As Long
       
        Dim wsr As Range
        
  
        Range("tableau_RAPPORT").End(xlUp).Offset(1, 0).Select
    
        iRow = Range("tableau_RAPPORT").End(xlUp).Row + 1
   
        'Si le formulaire est complet on enregistre les données dans le tableau dans les cellules vides
        
        While (Cells(iRow, 1).Value <> "")
        iRow = iRow + 1
        Wend
        Cells(iRow, 1).Select

  

        Cells(iRow, 1) = TextBox_Date_jour.Value
        Cells(iRow, 7) = TextBox_Evenement.Value
        
        
        'Après insertion, on remet les valeurs initiales
        
        Me.TextBox_Date_jour = ""
        Me.TextBox_Evenement = ""
        
        
    ThisWorkbook.Save
    
    Unload Me
    
        
End Sub


Merci pour ton aide et pour ton temps

Cordiallement

Guerschom