IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fonction Work_Book Open (créer une référence unique à chaque ouverture d'un template) [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 58
    Par défaut Fonction Work_Book Open (créer une référence unique à chaque ouverture d'un template)
    Bonjour,

    Je suis complètement novice par rapport aux macro et je dois créer un modèle de document excel de type request ayant une référence unique qui devra s'incrémenter automatiquement à chaque ouverture avec l'année en cours associée.

    E gros je voudrais avoir une référence construite sous ce format :

    "Label ValeurIncrémentée/AnnéeEnCours"

    Par exemple "Toto 001/2016"

    Pour le moment j'en suis arrivée à ce stade :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Workbook_Open()
    Sheets("Feuil1").Activate
    Dim Annee As Integer
     
    Range("B1") = Range("B1") + 1
    Annee = Year(Now())
    Range("B2") = Annee
     
    End Sub
    Avec ce code j'ai une valeur et une année.

    Par contre la valeur ne s'incrémente qu'une seule fois si je ne sauvegarde pas le fichier à chaque fois.
    L'ojectif étant de garder le template vide ce n'est pas terrible.
    Et je ne sais pas comment faire pour les associer à un Label et à les rassembler dans une seule cellule.

    Merci d'avance,

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour BlueWolf9,

    La seule manière que tu as d'incrémenter correctement ton nouveau fichier est de savoir combien d'anciens fichiers ont été créés.
    Et la seule manière que tu saches cela serait qu'ils soient tous enregistrés dans un répertoire commun.

    Ainsi, est-ce le cas ?

    Cordialement,
    Kimy

  3. #3
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 112
    Par défaut
    Bonjour

    Afin que la valeur s'incrémente il est obligatoire de "sauvegarder" la dernière valeur utilisée.
    Pour cela il faut enregistrer le template après son ouverture avec les nouvelle valeurs. Comme ça si tu travailles dessus et que quelqu'un d'autre créé un document à partir de ce template pendant ce temps là, le numéro sera incrémenté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Sub Workbook_Open()
     
        Const TempPath As String = "C:\Template.xltm" 'ici le chemin et le nom du template
     
        With ThisWorkbook.Worksheets(1)
             If .Range("B2") = Year(Now()) Then
                .Range("B1") = Range("B1") + 1
             Else
                .Range("B1") = 1
                .Range("B2") = Year(Now())
             End If
        End With
        ThisWorkbook.SaveAs Filename:=TempPath, FileFormat:=xlOpenXMLTemplateMacroEnabled
     
    End Sub
    EDIT : Le gros défaut de cette approche c'est que si quelqu'un fait une fausse manip, et que le fichier n'est pas enregistré ensuite, il risque d'y avoir des trous dans les indices.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Avec de si on mettrait Paris en bouteille!

    Alors je vais y aller avec mes Si!

    Si tu travail en location,
    Si tu es administrateur de la machine,

    Utilises la base de registre pour incrémenter dz valeur!

    Si tu est en réseau stock ta valeur dans un fichier texte!

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 58
    Par défaut
    Rdurupt
    Je n'ai pas completement compris ce que tu as expliqué. Mais ça pourrait peut-être être la solution au problème d'incrémentation.

    letienne
    Le souci c'est que je dois sauvergarder mon fichier sous un nouveau nom à chaque fois.

    Par exemple j'ai un fichier Template (sur lequel je génére une référence)
    Les utilisateurs le remplissent comme ils le souhaitent et le sauvent sous un autre nom. Et je ne peux pas maitriser le nom qu'ils vont donner au fichier.

    Kimy_Ire
    Comme je dois sauvergarder mon fichier sous un nouveau nom à chaque fois je perd ce lien de "valeur précédente"

  6. #6
    Invité
    Invité(e)
    Par défaut
    En effet les utilisateurs ouvrent incrémentent un fichier sur le réseau et le tout par programme.

    Peut importe ou quand comment il sauvegarde leur fichier Excel le code est dedans de toutes le façons!

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 58
    Par défaut
    J'ai pu modifier un peu le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    Sub Workbook_Open()
        Range("B1") = Range("B1") + 1
        Range("B2") = Year(Now())
        ActiveWorkbook.Save
    End Sub
     
    Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim Ref As Integer
     
       Chemin = ActiveWorkbook.Path
       Ref = Range("B1")
       Annee = Range("B2")
       Application.DisplayAlerts = False
     
    Range("B4") = "Toto" & " " & Ref & "/" & Annee
     
    End Sub
    De cette manière la valeur de référence continue de s'incrémenter et je peux sauvergarder chaque fichier sous un nom différent. Et je peux dans une autre cellule (B4) associer les différentes partie de ma référence.

    Le dernier point qui me dérange c'est que je souhaiterai avoir écrit "001" et non "1" dans la valeur de référence. J'ai essayé de changer la déclaration de variable mais ça ne fonctionne pas.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 112
    Par défaut
    Citation Envoyé par BlueWolf9 Voir le message

    letienne
    Le souci c'est que je dois sauvergarder mon fichier sous un nouveau nom à chaque fois.

    Par exemple j'ai un fichier Template (sur lequel je génére une référence)
    Les utilisateurs le remplissent comme ils le souhaitent et le sauvent sous un autre nom. Et je ne peux pas maitriser le nom qu'ils vont donner au fichier.
    Avec la solution que je t'ai donné, l'utilisateur peut enregistrer son fichier où il le souhaite et sous le nom qu'il veut. La référence s'incrémente à chaque fois que le template est ouvert, c'est tout.

    Pour changer le format des nombres, utilise NumberFormat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveCell.NumberFormat = "000"
    Pour le faire à partir d'une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim num As Long
    Dim reference As String
    num = 1
    reference = "totot2016/" & Format(num, "000")

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 58
    Par défaut
    C'est nickel.
    Merci pour tous vos conseils.

    Voici le résultat pour information :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Sub Workbook_Open()
        Range("B1") = Range("B1") + 1
        Range("B2") = Year(Now())
        ActiveWorkbook.Save
    End Sub
     
    Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim Ref As String
     
        Chemin = ActiveWorkbook.Path
        Ref = Format(Range("B1"), "000")
        Annee = Range("B2")
        Application.DisplayAlerts = False
     
    Range("B4") = "Toto" & " " & Ref & "/" & Annee
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une référence automatiquement
    Par FCL31 dans le forum IHM
    Réponses: 1
    Dernier message: 18/12/2007, 14h04
  2. Créer une référence dynamiquement
    Par Janny dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 20/07/2007, 14h15
  3. Réponses: 6
    Dernier message: 27/08/2006, 18h57
  4. [VS2005][WS]Créer une référence web dynamique
    Par virgul dans le forum Visual Studio
    Réponses: 5
    Dernier message: 24/08/2006, 16h16
  5. Réponses: 6
    Dernier message: 17/08/2006, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo