Sauvegarde automatique suite à incrémentation automatique

Bonjour,

Dans le fichier joins je n’arrive pas à faire une sauvegarde automatique de la numérotation à laquelle je me suis arrêtée lorsque que je clique sur la croix de mon useform.

La finalité c’est lorsque je clique pour « obtenir un numéro » l’incrémentation automatique du numéro qui ce fait soit sauvegardé lorsque je quitte le fichier par l’useform.

Quelqu’un peut me dire où est le problème dans le code ? Surtout que lorsque je ferme par l'useform (par la feuille de calcul le problème n'y ait pas) et que je veux ouvrir de nouveau j'ai le message "Erreur d'exécution '429'".

Cordialement.

Bonjour,

Tu as plusieurs solutions (feuille cachée, registre, etc...) , celle que je te propose est à mon sens la plus indiquée car la valeur n'est pas visible pour l'utilisateur lambda et elle suit le classeur car embarquée avec lui.

C'est d'utiliser un "Nom". Voici un bout de code à mettre dans le module du formulaire et tester en ouvrant ce dernier plusieurs fois pour voir le résultat et ensuite, tu n'as plus qu'à adapter à tes besoins (commentaires dans le code) !

Reviens si tu n'y arrives pas :

Private Sub UserForm_Initialize()

    Dim Nom As Name
    Dim Valeur

    'gestionnaire si le nom n'existe pas encore
    On Error Resume Next
    Set Nom = ThisWorkbook.Names("Increment")

    'si il existe...
    If Err.Number = 0 Then

        'évite le signe "="
        Valeur = Right(Nom.Value, Len(Nom.Value) - 1)

        'incrémente de 1 à chaque ouverture du formulaire
        Valeur = CLng(Valeur + 1)

        'affiche la valeur incrémentée
        TextBoxNUM = Valeur

        'et la stocke dans le nom
        ThisWorkbook.Names("Increment").Value = Valeur

    Else

        'création du nom...
        'avec la valeur "False", le nom est caché dans le gestionnaire de noms
        'la valeur de départ est "705005", à adapter...
        ThisWorkbook.Names.Add "Increment", 705005, False

    End If

End Sub

Merci pour ton code. Je l'ai intégré dans le fichier joins. Le problème c'est quand je quitte sur la croix pour fermer l'useforme, je voudrai que le fichier se ferme en sauvegardant le dernier numéro utilisé. Dans ton code l'useforme se ferme mais le fichier reste ouvert. De plus il faudrait que soit l'useforme apparaîsse avec aucun chiffre avant de cliquer sur un nouveau numéro ou soit qu'il s'affiche avec le dernier utilisé.le dernier chiffre

Cordialemement.

Re,

Donc sur Initialize :

Private Sub UserForm_Initialize()

    Dim Nom As Name

    'gestionnaire si le nom n'existe pas encore
    On Error Resume Next
    Set Nom = ThisWorkbook.Names("Increment")

    If Err.Number = 0 Then TextBoxNUM.Text = Right(Nom.Value, Len(Nom.Value) - 1)

End Sub

sur QueryClose :

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    Dim Nom As Name

    'si le TextBox est vide ou contient du texte, fin !
    If TextBoxNUM.Text = "" Then Exit Sub
    If Not IsNumeric(TextBoxNUM.Text) Then Exit Sub

    On Error Resume Next
    Set Nom = ThisWorkbook.Names("Increment")

    'si il existe...
   If Err.Number = 0 Then

        ThisWorkbook.Names("Increment").Value = TextBoxNUM.Text

    Else

       ThisWorkbook.Names.Add "Increment", TextBoxNUM.Text, False

    End If

End Sub

dans ce cas, l'incrémentation devra être effectuée soit manuellement soit automatiquement mais par une autre procédure !

Merci pour le nouveau code que J'ai intégré dans le fichier joins. L'incrémentation ce fait bien mais je voudrais lorsque je clique sur la croix de l'useform que le fichier en même temps que l'useform se ferme en faisant bien évidemment la sauvegarde.

Actuellement si je clique sur la croix de l'useform ce dernier se ferme bien mais la feuille de calcul reste ouverte.

Cordialement.

Bonjour,

Oui, j'ai oublié de répondre à cette question précédemment ! Donc, cette ligne de code est à mettre en fin de procédure "QueryClose()" :

ThisWorkbook.Close True

Voici le code complet :

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    Dim Nom As Name

    'si le TextBox est vide ou contient du texte, fin !
   If TextBoxNUM.Text = "" Then Exit Sub
    If Not IsNumeric(TextBoxNUM.Text) Then Exit Sub

    On Error Resume Next
    Set Nom = ThisWorkbook.Names("Increment")

    'si il existe...
  If Err.Number = 0 Then

        ThisWorkbook.Names("Increment").Value = TextBoxNUM.Text

    Else

       ThisWorkbook.Names.Add "Increment", TextBoxNUM.Text, False

    End If

    ThisWorkbook.Close True

End Sub

Salut

Impec merci. Je mets ma question en résolue.

Cordialement.

Rechercher des sujets similaires à "sauvegarde automatique suite incrementation"