Sauvegarde automatique suite à incrémentation automatique Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
p
philippe.p@
Membre fidèle
Membre fidèle
Messages : 323
Inscrit le : 16 décembre 2016
Version d'Excel : office 10

Message par philippe.p@ » 1 décembre 2017, 14:46

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.
Numérotation automatique.xls
Fichier numérotation
(47 Kio) Téléchargé 24 fois
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'516
Appréciations reçues : 242
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 1 décembre 2017, 15:19

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
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
p
philippe.p@
Membre fidèle
Membre fidèle
Messages : 323
Inscrit le : 16 décembre 2016
Version d'Excel : office 10

Message par philippe.p@ » 1 décembre 2017, 15:35

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.
Numérotation automatique v1.xls
fichier v1
(52.5 Kio) Téléchargé 19 fois
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'516
Appréciations reçues : 242
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 1 décembre 2017, 16:43

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 !
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
p
philippe.p@
Membre fidèle
Membre fidèle
Messages : 323
Inscrit le : 16 décembre 2016
Version d'Excel : office 10

Message par philippe.p@ » 1 décembre 2017, 21:06

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.
Numérotation DAF année 2018 v2.xls
fichier v2
(53 Kio) Téléchargé 32 fois
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'516
Appréciations reçues : 242
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 2 décembre 2017, 07:28

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
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
p
philippe.p@
Membre fidèle
Membre fidèle
Messages : 323
Inscrit le : 16 décembre 2016
Version d'Excel : office 10

Message par philippe.p@ » 2 décembre 2017, 15:43

Salut

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

Cordialement.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message