Saisie dans plusieurs feuille à partir du même formulaire

18suivi-2021.xlsm (187.48 Ko)

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 Sub

Salut 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 Sub

Pour 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 Sub

Mais, il faudrait repasser par les étapes énoncées plus haut...


A+

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 Hilaire,
Salut Thev,

je n'avais rien de mieux à faire, aussi j'ai redessiné l'Userform et entamé une petite refonte du fonctionnement...
Délire, délire...
En attendant, une petite image...


A+

image

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 !

68hilaire.xlsm (174.23 Ko)


A+

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+

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.

Rechercher des sujets similaires à "saisie feuille partir meme formulaire"