Enregistrer des données sur une feuille Excel

Bonjour membres du forum,

Comment enregistrer des données sur une feuille Excel grâce à un UserForm ?

Code Enregistrer:

Option Explicit
Private OP As Worksheet

Private Sub CmdENREGISTRER_Click()
'_____________________________________________________________
Dim rep As Byte
    rep = MsgBox("Voulez vous enregistrer " & vbCrLf & _
    "les modifications effectuées ?", vbOKCancel)
    If rep <> 1 Then Exit Sub
'______________________________________________________________
'"& vbCrLf & "
If Me.TextBoxID_Etabl = "" Or Me.TextBoxNomEtablissement = "" _
Or Me.TextBoxNomARABE_Etabl = "" Or Me.TextBoxCode_Prive = "" _
Or Me.TextBoxAutres_Infos = "" Or Me.TextBoxId_AdresseEtab = "" _
Or Me.TextBoxObservations = "" Then
    MsgBox "Vous n'avez pas renseigné le champ", vbInformation, "Saisie manquante"
    Me.TextBoxID_Etabl.SetFocus
    Me.TextBoxNomEtablissement.SetFocus
    Me.TextBoxNomARABE_Etabl.SetFocus
    Me.TextBoxId_AdresseEtab.SetFocus
    Me.TextBoxCode_Prive.SetFocus
    Me.TextBoxAutres_Infos.SetFocus
    Me.TextBoxObservations.SetFocus
    Me.TextBoxDateEnregistrement.SetFocus
    Exit Sub
  End If
  If Not IsDate(TextBoxDateEnregistrement.Value) Then
    MsgBox "Attention, saisissez une date de réception en respectant le format JJ/MM/AAAA.", vbExclamation, "Saisie manquante"
    TextBoxNomEtablissement.SetFocus
    Exit Sub
  End If
  ActiveSheet.Unprotect Password:="oumar"
  OP.Range("B2").Value = Val(TextBoxID_Etabl.Value)
  OP.Range("C2").Value = Val(TextBoxNomEtablissement.Value)
  OP.Range("G2").Value = Val(TextBoxNomARABE_Etabl.Value)
  OP.Range("E2").Value = Val(TextBoxId_AdresseEtab.Value)
  OP.Range("F2").Value = Val(TextBoxAutres_Infos.Value)
  OP.Range("H2").Value = Val(TextBoxCode_Prive.Value)
  OP.Range("I2").Value = Val(TextBoxObservations.Value)
  OP.Range("D2").Value = CDate(TextBoxDateEnregistrement.Value)
  ActiveSheet.Protect Password:="oumar", UserInterfaceOnly:=True
  ActiveWorkbook.Protect Password:="oumar" ', UserInterfaceOnly:=True
  Unload Me
End Sub

Message d'erreur:

userform 46 userform 47

Pièce jointe

Cordialement.

Votre impression concernant les deux codes (celui du 1er Post et ci dessous ?

Private Sub CmdButtonActualiser_Click()

'On décharge le formulaire et le Recharge
Unload Me
UserFormEtablissScol.Show
End Sub

Private Sub CmdENREGISTRER_Click()

'_____________________________________________________________
'Dim rep As Byte
    'rep = MsgBox("Voulez vous enregistrer " & vbCrLf & _
    "les modifications effectuées ?", vbOKCancel)
    'If rep <> 1 Then Exit Sub
'______________________________________________________________
'"& vbCrLf & "
 ' [...] j'ai ici entre les deux des codes pour des messages à afficher mais qui n'ont rien avoir avec le problème
    Dim L As Integer
    If MsgBox("Enregistrer l'observation ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
        'Bloc With/end with: tous les objets avec un . devant sont lies a l'objet defini par le With
        With Sheets("EtablissementScolaire_Service")
            'premiere cellule vide colonne B
            L = .Range("B65536").End(xlUp).Row + 1
            .Range("B" & L).Value = TextBoxID_Etabl
            .Range("C" & L).Value = TextBoxNomEtablissement
            .Range("D" & L).Value = TextBoxNomARABE_Etabl
            .Range("E" & L).Value = TextBoxDateEnregistrement
            .Range("F" & L).Value = TextBoxCode_Prive
            .Range("G" & L).Value = TextBoxAutres_Infos
            .Range("H" & L).Value = TextBoxId_AdresseEtab
            .Range("I" & L).Value = TextBoxObservations

        End With
    End If
    'Unload Me
CmdButtonActualiser_Click
End Sub
userform 48

Cordialement.

Bonjour

Ci joint ma solution

A+ François

Ps val(textbox) ce n'est que pour des valeurs numérique

Bonjour fanfan38,

Votre solution est impeccable,

Maintenant, je souhaiterais y ajouter la gestion de doublons du champ ID_Etal ,

Ensuite trouver le code de la commande MODIFIER et SUPPRIMER.

Option Explicit
Private OP As Worksheet

Private Sub CmdENREGISTRER_Click()
'_____________________________________________________________
Dim rep As Byte
    rep = MsgBox("Voulez vous enregistrer " & vbCrLf & _
    "les modifications effectuées ?", vbOKCancel)
    If rep <> 1 Then Exit Sub
 '______________________________________________________________
 '"& vbCrLf & "
  If Me.TextBoxID_Etabl = "" Or Me.TextBoxNomEtablissement = "" _
   Or Me.TextBoxNomARABE_Etabl = "" Or Me.TextBoxCode_Prive = "" _
   Or Me.TextBoxAutres_Infos = "" Or Me.TextBoxId_AdresseEtab = "" _
   Or Me.TextBoxObservations = "" Then
    MsgBox "Vous n'avez pas renseigné tous les champs", vbInformation, "Saisie manquante"
    Exit Sub
  End If
  If Not IsDate(TextBoxDateEnregistrement.Value) Then
    MsgBox "Attention, saisissez une date de réception en respectant le format JJ/MM/AAAA.", vbExclamation, "Saisie manquante"
    TextBoxNomEtablissement.SetFocus
    Exit Sub
  End If
  Dim n As Long
  Set OP = Sheets("EtablissementScolaire_Service")
  ActiveSheet.Unprotect Password:="oumar"
  If [T_etabl].Item(1, 1) <> "" Then n = [T_etabl].Rows.Count + 1 Else n = 1
  [T_etabl].Item(n, 1) = "xxxx"
  [T_etabl].Item(n, 1) = Val(TextBoxID_Etabl.Value)
  [T_etabl].Item(n, 2) = TextBoxNomEtablissement.Value
  [T_etabl].Item(n, 6) = TextBoxNomARABE_Etabl.Value
  [T_etabl].Item(n, 4) = Val(TextBoxId_AdresseEtab.Value)
  [T_etabl].Item(n, 5) = TextBoxAutres_Infos.Value
  [T_etabl].Item(n, 7) = TextBoxCode_Prive.Value
  [T_etabl].Item(n, 8) = TextBoxObservations.Value
  [T_etabl].Item(n, 3) = CDate(TextBoxDateEnregistrement.Value)
  OP.Protect Password:="oumar", UserInterfaceOnly:=True
  ActiveWorkbook.Protect Password:="oumar" ', UserInterfaceOnly:=True
  Unload Me
End Sub

Cordialement.

Bonjour

Est ce que ça répond à tes souhaits...

A+ François

Bonjour fanfan38,

Il y a des messagers d'erreur dans code Enregistrer.

userform 51

Après clique sur la commande ENREGISTRER voici le message qui apparaît: LA METHODE DE L'OBJET ITEM a ECHOUE

userform 52

Cordialement.

Bonjour

Suite à votre demande ici -->https://forum.excel-pratique.com/excel/comment-interdire-les-doublons-au-depart-d-un-enregistrement-...
J'ai testé sur base du fichier de fanfan38 en ajoutant les données que vous montrez dans l'image , et il n'y a aucune erreur qui apparait à l'enregistrement

Cordialement

Je vous ramène une copie dans laquelle Jai 'introduit le code que vous m'avez donné:

Private Sub UserForm_Initialize()
With TextBoxID_Etabl
    .Enabled = False 'eviter acces a la textbox
    .Value = WorksheetFunction.Max(Feuil1.ListObjects("T_etabl").ListColumns(1).DataBodyRange.Value) + 1
End With
End Sub

Le nom de Feuil1 du bout de code suivant doit il être remplacer par EtablissementScolaire_Service ?

(Feuil1.ListObjects("T_etabl")

userform 56

Remarque: le nom de l'entête de certains champs a changé.

Quelle serait la cause ?

Bonjour

Après une journée à essayer de comprendre pourquoi le tableau structuré posé problème, j'ai abandonné et j'ai traité ton fichier à l'ancienne...

le but étant que ça marche....

A+ François

Bonjour

Le nom de Feuil1 du bout de code suivant doit il être remplacer par EtablissementScolaire_Service ?

Vous pouvez si vous voulez mais l'intérêt de Feuil1 est que si vous changez le nom de l'onglet de votre feuille, le code que je vous ai donné fonctionnera toujours.

Remarque: le nom de l'entête de certains champs a changé.

Je n'ai pas compris

Cordialement

userform 58

Après clique sur la commande modifier cela se produisait mais fanfan38 vient de me poster une version à l'ancienne qui marche

d'où il y a des erreurs à revoir

userform 61 userform 60 userform 62

1- Ensuite la commende SUPPRIMER ne fonctionne pas.

2- Les commandes marchent.

3- Le Code_Prive (voir la gestion des doublons).

Cordialement.

Problème corrigée

A+ François

je ne sais pas pourquoi fanfan38 est repassé sans tenir compte des tableaux structurés.

Sinon dans votre souci, le mieux est que lui vous réponde puisqu'il suit votre demande depuis le début. Toutefois je ferais ceci dans votre fichier
Puis votre fichier n'a pas l'air le même que celui de fanfan38, vous utilisez un autre ?

1. Modifier le code dans thisworkbook

Private Sub Workbook_Open()
Load UFrmGESTION_ECOLE
UFrmGESTION_ECOLE.Show ' mode non modal impératif sinon: message d'erreur
End Sub

2. Remplacez le code Userfrom_Activate par celui ci-dessous et dans lequel j'ai ajouté deux instructions pour votre mot de passe. remplacez la mention "Votre mot de passe" par le mot de passe que vous utilisez

Private Sub UserForm_Initialize()
Dim rng
With Sheets("EtablissementScolaire_Service")
    .Unprotect "votre mot de passe"
    rng = Sheets("EtablissementScolaire_Service").Range("B2").CurrentRegion
    'rng = Sheets("EtablissementScolaire_Service").ListObjects(1).DataBodyRange.Value 'si tableaux structurés... - A tester
    Me.ListBoxECOLE.List = rng
    Me.ListBoxListeFeuilles.List = GetSheetList
    .Protect "votre mot de passe"
End With
End Sub

Cordialement

Il y a encore des messages d'erreurs

Voici mon mot de passe "oumar"

userform 64 userform 65

moi je n'ai pas de message...

A quel moment? en faisant quoi?

A+ François

La pièce que vous venez de poster marche bien.

Cependant, j'ai deux demandes à vous soumettre:

1 - Eviter les doublons dans le Textbox Code_Prive au moment de la saisie (un Msgbox m'averti que le présent code existe déjà !!!

2 - Le Textbox NomARABE_Etabl faire en sorte que le curseur sélectionne automatiquement la Police d'écriture Arabe dès qu'IL Reçois le focus

et la police revient au Français quand le curseur le quitte.

Cordialement.

pour le code est ce que tu souhaite un code automatique? (sinon c'est fait sur le dernier fichier envoyé=si code déjà existant =>message)

quel police de caractère pour l'arabe?

A+ François

Arial et Arial Unicode MS

Quan tu ecris en arabe tu configure ton clavier?

moi je t'ai mis arial arabe mais je pense qu'il faut une config clavier...

ouvre un autre post si ça ne marche pas

A+ François

https://forum.excel-pratique.com/s/goto/1084523
Il y a encore des messages d'erreurs

Voici mon mot de passe "oumar"

Ben dans mon code vous remplacez la mention "Votre mot de passe" par "oumar"

Je ne sais pas si fanfan38 tiendra compte de ce que j'ai écrit dans mon message. A vous de voir avec lui mais je reste dispo.

Cordialement

Rechercher des sujets similaires à "enregistrer donnees feuille"