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.