Saisie dans plusieurs feuille à partir du même formulaire
Bonjour cher tous. Svp pourriez vous m'aider à terminer mon code qui pourrait me permettre de saisir des données dans plusieurs feuilles après sélection de la feuille. trouver ci dessous le code. il s'agit pour les memes rubriques a renseigner chaque mois les mois constituants les feuilles a sélectionner
Merci à vous.
'***************************************
'Procedure de fermeture du formulaire
'***********************************
Private Sub btnFermer_Click()
Unload Me
End Sub
'***********************************************
'Procedure d'acces à la base de donnees
'*******************************************
Private Sub btnVoirsource_Click()
Sheets("JANVIER 2021").Activate
Range("A3").Select
End Sub
'**************************************************
'Procedure de Réinitialisation des champs
'***************************************************
Private Sub btnEffacer_Click()
txtDate = ""
txtConsultation = ""
txtCmu = ""
txtInjections = ""
txtPansements = ""
txtMeo = ""
txtPf = ""
txtCtroletension = ""
txtPetitechir = ""
txtDéclarnsse = ""
txtCertifmé = ""
txtDuplicata = ""
txtCarnesté = ""
txtCarnetme = ""
txtThermo = ""
txtGan = ""
txtLabo = ""
txtPsp = ""
txtHpsp = ""
txtEcho = ""
End Sub
'******************************************************
'Procedure d'activation du bouton AJOUTER
'******************************************************
Private Sub txtDate_Change()
If txtDate <> "" Then
btnAjout.Enabled = True 'activer le bouton
Else
btnAjout.Enabled = False 'desactiver le bouton
End If
End Sub
'***************************************************
'Procedure d'ajout d'un nouvel enregistrement
'****************************************************
Private Sub btnAjout_Click()
Sheets("JANVIER 2021").Activate
Range("A3").Select
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select
ActiveCell = txtDate.Value
ActiveCell.Offset(0, 1).Value = txtConsultation
ActiveCell.Offset(0, 2).Value = txtCmu
ActiveCell.Offset(0, 3).Value = txtInjections
ActiveCell.Offset(0, 4).Value = txtPansements
ActiveCell.Offset(0, 5).Value = txtMeo
ActiveCell.Offset(0, 6).Value = txtPf
ActiveCell.Offset(0, 7).Value = txtCtroletension
ActiveCell.Offset(0, 8).Value = txtPetitechir
ActiveCell.Offset(0, 10).Value = txtDéclarnsse
ActiveCell.Offset(0, 11).Value = txtCertifmé
ActiveCell.Offset(0, 12).Value = txtDuplicata
ActiveCell.Offset(0, 14).Value = txtCarnesté
ActiveCell.Offset(0, 15).Value = txtCarnetme
ActiveCell.Offset(0, 16).Value = txtThermo
ActiveCell.Offset(0, 17).Value = txtGan
ActiveCell.Offset(0, 19).Value = txtLabo
ActiveCell.Offset(0, 20).Value = txtPsp
ActiveCell.Offset(0, 21).Value = txtHpsp
ActiveCell.Offset(0, 23).Value = txtEcho
End Sub
'********************************************
'PROCEDURE DE SELECTION DU MOIS
'*********************************************
Private Sub cbomois_Change()
If cbomois <> "" Then
txtDate.Enabled = True 'activer le bouton
Else
txtDate.Enabled = False 'desactiver le bouton
End If
End SubSalut Hilaire,
Ben, 'y a du taf', camarade !
Concerne le fichier : suivi-2021-avec-selection-mois.xlsm
- veiller à la similitude stricte entre les noms de feuille et la liste !!!!
"FEVVRIER 2021", "MAI 2021" avec 2 espaces, "SEPTEMBRE 2020" !!
- la feuille "FEVRIER 2021" n'est vraiment pas la même que les autres !!
- abstraction faite des tailles disparates des contrôles, veiller à minima à une suite TAB INDEX cohérente ;
- puisque les données se suivent selon les colonnes des feuilles, une bonne idée est de nommer les contrôles TEXTE de façon identique avec un index correspondant à leur n° de colonne : une simple boucle suffit alors pour les inscrire.
Exemple : txt2, txt3, txt7
Pour activer la feuille sous formulaire :
'***********************************************
'Procedure d'acces à la base de donnees
'*******************************************
Private Sub btnVoirsource_Click()
Worksheets(Me.cbomois.Text).Activate
Range("A3").Select
End SubPour ajouter :
'***************************************************
'Procedure d'ajout d'un nouvel enregistrement
'****************************************************
Private Sub btnAjout_Click()
With Sheets(Me.cbomois.Text)
.Range("A" & .Columns(1).Find(what:="Date", lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Row + Day(CDate(Me.txtDate.Text))).Select
ActiveCell.Offset(0, 1).Value = txtConsultation
ActiveCell.Offset(0, 2).Value = txtCmu
ActiveCell.Offset(0, 3).Value = txtInjections
ActiveCell.Offset(0, 4).Value = txtPansements
ActiveCell.Offset(0, 5).Value = txtMeo
ActiveCell.Offset(0, 6).Value = txtPf
ActiveCell.Offset(0, 7).Value = txtCtroletension
ActiveCell.Offset(0, 8).Value = txtPetitechir
ActiveCell.Offset(0, 10).Value = txtDéclarnsse
ActiveCell.Offset(0, 11).Value = txtCertifmé
ActiveCell.Offset(0, 12).Value = txtDuplicata
ActiveCell.Offset(0, 14).Value = txtCarnesté
ActiveCell.Offset(0, 15).Value = txtCarnetme
ActiveCell.Offset(0, 16).Value = txtThermo
ActiveCell.Offset(0, 17).Value = txtGan
ActiveCell.Offset(0, 19).Value = txtLabo
ActiveCell.Offset(0, 20).Value = txtPsp
ActiveCell.Offset(0, 21).Value = txtHpsp
ActiveCell.Offset(0, 23).Value = txtEcho
End With
'
End SubMais, il faudrait repasser par les étapes énoncées plus haut...
A+
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
ci-jointe une proposition avec code révisé et tableaux structurés redéfinis correctement.
NB: Un tableau structuré ne doit pas comporter de lignes vides car il est naturellement borné (petit triangle vert dans la dernière cellule en bas à droite)
Salut Thev
merci pour le retour je teste et je vous fais un retour
Salut Curulis57
merci je teste et vous fait un retour.
toutefois pourriez vous me dire que dois je entendre par TAB INDEX. Je fais mes premiers pas en VBA apres lecture de quelques tutos.
merci encore
Salut Hilaire,
je travaille sur ton fichier à l'instant.
Je reviens vers toi dans le courant de la nuit et je t'explique tout ça !
A+
Salut Hilaire,
Salut Thev,
voilà ton fichier avec mes petits délires, une idée en entraînant une autre suivie de ses petits détails qui bouffent le temps.
- le fichier s'ouvre sur le mois en cours et souligne la date du jour ;
- j'ai remplacé la cellule "Date" en [A6] par l'année en cours ;
- j'ai supprimé la feuille 'Tableau de bord' : pas besoin !
- pour accéder au formulaire, tu choisis (ou non, d'ailleurs) le mois désiré et tu DOUBLE-cliques sur la date à encoder (modifier) en colonne [A:A] ;
- le formulaire s'affiche en ayant incorporé les valeurs du jour si existantes ;
- le formulaire est chargé en mode non-modal, c-à-d que tu peux toujours agir sur la feuille en arrière-plan !
- pour changer de mois, tu as la ComboBox : un choix active immédiatement la feuille sélectionnée mais sans date déterminée ;
- pour choisir alors une date, tu as 2 méthodes :
* soit, taper le nombre du jour (2 caractères max, donc) dans la TextBox "txtDate", par ex: 17 + ENTER. La ligne du jour sélectionné se souligne de couleur et les valeurs éventuelles sont chargées dans le formulaire ;
* soit DOUBLE-cliquer sur la date voulue en colonne [A:A] sur la feuille en arrière-plan.
- les TextBox sont nommées de façon linéaire "txt1","txt2" mais leur propriété TAG reçoit le n° de colonne correspondant à leur position dans la feuille ce qui facilite l'inscription des valeurs
With Sheets(Me.cbomois.Text)
For x = 1 To 19
.Cells(Val(Me.lblRow.Caption), CInt(Me.Controls("txt" & x).Tag)) = Me.Controls("txt" & x).Text
Next
End With- en changeant l'année en [A6] dans n'importe quelle feuille, tu lances la création d'un nouveau fichier vierge pour l'année encodée :
* le fichier en cours s'enregistre avant d'effectuer les changements ;
* les données s'effacent, les feuilles sont renommées selon le nouveau millésime, les dates mensuelles sont recalculées par formules, les feuilles 'BILAN' et 'LIVRE DE CAISSE' subissent le même sort ;
* le nouveau fichier s'enregistre avec son nouveau millésime.
J'ai sans doute oublié quelque chose : si ça me revient, je te contacte...
! À tester !
A+
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour Curulis,
les TextBox sont nommées de façon linéaire "txt1","txt2" mais leur propriété TAG reçoit le n° de colonne correspondant à leur position dans la feuille ce qui facilite l'inscription des valeurs
Certes. Mais si une nouvelle colonne est insérée dans la feuille Mois, il faut revoir la numérotation. Mieux vaut utiliser les noms de colonnes comme je l'avais fait dans ma proposition, en les mettant dans ControlTipText, ce qui permet de s'affranchir de toute numérotation.
Salut Thev,
j'avais prévu de mettre cet avertissement dans mes explications puis j'ai oublié...
C'est ta solution en tableaux structurés qui est certainement la meilleure mais n'étant coupablement pas habitué à ce bestiau, ma première idée a été celle-là.
Par contre, pourquoi utiliser ControlTipText ? C'est une info-bulle qu'en tant qu'utilisateur, vu l'utilisation ici, je préférerais ne pas voir.
A+
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour Curulis,
Par contre, pourquoi utiliser ControlTipText ?
Tout simplement pour permettre un contrôle visuel lorsque le formulaire est affiché.
NB : La solution en tableaux structurés avait été ébauchée par le demandeur.
Cela dit, même sans tableau structuré, il est possible d'utiliser les noms de colonne. Une simple instruction Find sur la ligne d'entête du tableau permet de récupérer le numéro de colonne. L'utilisation d'une simple numérotation complique toute maintenance ultérieure.
Bonjour chers tous.
A Thev et Curulis merci infiniment pour votre aide.
je tiens à m'excuser pour le retard avec lequel je vous reviens. Ce retard independant de ma volonté est du au fait que j'étais malade tout ce temps. Maintenant je suis ok.
encore une fois mille merci à vous.
