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 :

[VBA-E]insérer un compteur automatique dans une feuille excel ?


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [VBA-E]insérer un compteur automatique dans une feuille excel ?
    Salut.

    Je ne suis pas très habile avec visual basic et j'aurrais besoin de votre aide.

    La macro que j'aimerais effectuée devrais être cappable de faire les choses suivantes:
    -générer un numéro unique à mon classeur (dans la cellule nommée numFact) à chaque ouverture de mon modèle excel
    -si le classeur n'a pas été utilisé ou enregisté, annuler la numérotation de celui-ci
    -enregistrer sous le nom d'une cellule "x" le classeur lors de la fermeture
    -réinitialiser la feuille afin de pouvoir y insérer à nouveau des nouvelles données sans avoir à les supprimer manuellement.

    J'ai déja un début de fait mais ça ne fonctionne pas totalement et j'aimerais y apporter des modifications.

    Pouvez-vous m'aider SVP

    Merci d'avance

    Charley

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Bonsoir Charley_250, bienvenue sur le forum,
    Il serait bien que tu nous montres ce que tu as fait, ça nous éviterais d'avoir à écrire une page de code pour nous apercevoir que ce pas ce que tu veux
    Citation Envoyé par Tu
    devrais être cappable de ... générer un numéro unique à mon classeur (dans la cellule nommée numFact) à chaque ouverture de mon modèle excel
    Comment détermines-tu ce N°, comment est-il possible de savoir s'il est unique (unique par rapport à quoi ?)
    puis
    Citation Envoyé par Tu
    -enregistrer sous le nom d'une cellule "x" le classeur lors de la fermeture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Activeworkbook.saveas _
    Filename:= Chemin & WorkSheets("LaFeuille").Cells(NoLigne, NoColonne)
    puis
    Citation Envoyé par Tu
    -réinitialiser la feuille afin de pouvoir y insérer à nouveau des nouvelles données sans avoir à les supprimer manuellement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorkSheets("LaFeuille").Cells.clear
    A+

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Salut ouskel'n'or !

    Vous êtes rapides...

    Bon premièrement,
    Comment détermines-tu ce N°, comment est-il possible de savoir s'il est unique (unique par rapport à quoi ?)
    Je veux que les No se suivent (1,2,3,4...) après chaque enregistrement d'un classeur, qu'il n'y aie pas d'espace entre les No de deux classeurs qui se suivent (1,2,4,5...) et que le même No ne se répète pas (1,2,2,3...). Il doit être unique par rapport à son précedent.

    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 numérotation()
    Private Sub Workbook_Open()
        If ActiveWorkbook.Path = "" Then
        [numFact] = [numFact] + 1
        ActiveWorkbook.Saved = True
        ActiveWorkbook.SaveCopyAs (Application.TemplatesPath & "factaccopmte.xlt")
        End If
     
        Private Sub Workbook_BeforeClose(Cancel As Boolean)
        chemXlt = Application.TemplatesPath & "factaccompte.xlt"
        If ActiveWorkbook.Path = "" Then
        Set wbk = Workbooks.Open(chemXlt)
        With wbk.ActiveSheet
        .Range("NumFact") = .Range("NumFact") - 1
        End With
        wbk.Close True
        End If
    End Sub


    Merci et à plus tard

    Charley

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    qu'est-ce qui cloche dans ces codes... ?

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    j'ai pas bien compris ce que tu faisait avec ses procédures imbriquées..? (on peu pas imbriquer des procédures les unes dans les autres en VB..)

    essai de préciser le but recherché...

    Tu utilise des procédures événementielles..tiens lit ceci histoire de mieux comprendre comment t'en servir :
    Les événements du classeur par Michel Tanguy

    et un petit cours en prime :

    Programmer efficacement avec Excel en VBA (pdf, 46 pages, 711 Ko) par J-M Rabilloud

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    En un premier temps je réponds à ça :
    La macro que j'aimerais effectuer devrais être capable de faire les choses suivantes:
    -générer un numéro unique à mon classeur (dans la cellule nommée numFact) à chaque ouverture de mon modèle excel.
    puis, en un second temps à ça :
    -si le classeur n'a pas été utilisé ou enregisté, annuler la numérotation de celui-ci
    Une solution ?
    Deux fichiers : un modèle, à adapter à ta convenance "LeModèle.xlt"
    ....................une macro complémentaire, "EnregistrerFichier.xla"

    Dans le modèle (xlt), une macro lance l'enregistrement en passant en paramètres le chemin et le nom du fichier à enregistrer, sans son numéro, à une macro placée dans le xla.
    La macro placée dans le xla enregistre et ferme le fichier si l'enregistrement est demandé. Le N° de fichier ne sera pas incrémenté si le fichier créé selon le "modèle" n'est pas enregistré.

    J'ai placé un bouton sur feuil1 pour que tu puisses tester l'enregistrement.
    Tu pourras le remplacer par une icône dans une règle perso que tu places dans le modèle (xlt)

    Pour faire l'essai sans toucher aux macros :
    Le xla est à placer dans "C:\Program Files\Microsoft Office\Office10\Macrolib\"
    Le xlt dans "C:\Program Files\Microsoft Office\Modèles"

    Dans leModèle.xlt, il y a donc une macro qui passe le chemin et le nom désiré en paramètre au xla.
    Tu peux déterminer le chemin en fonction de tes propres critères et remplacer le nom en dur qui se trouve dans la macro du modèle par un inputbox par exemple.
    Les fichiers : Pièce jointe 10917
    J'ai voulu te mettre juste le code et te laisser te débrouiller mais comme j'ai testé mon idée, c'était idiot de ne pas te les mettre
    Bien sûr, c'est incomplet par rapport à tes desiderata mais on verra ensuite
    A+

    NB - Je remercie ici dadavyvy pour son aide pour Application.run avec passage de paramètres

    Edit
    Je viens de relire ta question et en ai fait une autre interprétation
    Pour régler ton pb "tel que je viens de le comprendre", il te suffira de modifier la macro complémentaire : Au lieu d'enregistrer le fichier avec le N° incrémenté, tu insères le N° dans ta cellule. Pour le reste, le principe reste le même.

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    J'ai modifier les macros afin qu'elles fassent ce que tu "sembles" souhaiter...
    Dans la macro complémentaire EnregistreFichier.xla, modifie comme ça
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    'A placer dans C:\Program Files\Microsoft Office\Office10\Macrolib\
    Option Explicit
    Public NoFich As String
     
    Sub LireNo() 'appelé depuis PlacerLeNoDansnumFact() et FermerLeFichier()
    '... Ligne 6
    '... Ligne 7
    '... Ligne 8
    '... Ne pas déplacer la ligne suivante (ligne 10 du module)
    NoFich = CStr(0)
    End Sub
     
    Sub FermerLeFichier(Chemin, LeNom)
    Dim msg As String, NoFich As String, cl As Variant
        Call LireNo 'lit le n° afin de pouvoir l'incrémenter
        If MsgBox("Enregistrer ? ", vbYesNo, "FERMETURE DU FICHIER") = vbYes Then
             msg = "NoFich = " & CStr(Val(NoFich) + 1)
     
    Set cl = Workbooks("EnregistrerFichier.xla").VBProject.VBComponents("Enregistrement")
             cl.CodeModule.ReplaceLine 10, msg
             Workbooks("EnregistrerFichier.xla").Save 'enregistrement de la modification
             ActiveWorkbook.SaveAs Filename:=Chemin & LeNom & ".xls"
             DoEvents
        End If
        ActiveWorkbook.Close False 'Enregistré ou non, on ferme le classeur
    End Sub
     
    Sub PlacerLeNoDansnumFact(NomFich)
        Call LireNo 'lit le n° afin de pouvoir l'incrémenter
        Workbooks(NomFich).Worksheets("Feuil1").Range("numFact") = NoFich
    End Sub
    Dans LeModèle.xlt, tu modifies la macro qui ne servira qu'à l'enregistrement du fichier créé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'SUB A PLACER DANS LE MODÈLE
    'Modèle à placer dans C:\Program Files\Microsoft Office\Modèles
    Sub LancerEnregistrement()
    Dim Chemin As String, NomFich As String, NomComplet
        Chemin = "D:\xls\"
        NomFich = "monfichier"
        NomComplet = "'EnregistrerFichier.xla'!FermerLeFichier"
        Application.Run NomComplet, Chemin, NomFich
    End Sub
    et tu ajoutes dans la feuille de code de ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Workbook_Open()
    Dim NomMacro As String, NomFich As String
        NomFich = ActiveWorkbook.Name
        Application.AddIns.Add("C:\Program Files\Microsoft Office 2003\Office10\Macrolib\EnregistrerFichier.xla").Installed = True
        DoEvents
        NomMacro = "'EnregistrerFichier.xla'!PlacerLeNoDansnumFact"
        Application.Run NomMacro, NomFich
    End Sub
    macro qui ne servira, à l'ouverture du nouveau fichier, qu'à insérer le No dans NumFact

    Pour le reste ? J'ai pas tout compris
    A+

    Edit
    N'oublie pas de placer le nom de cellule NumFact là où tu veux qu'il soit dans le modèle

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Désolé pour la lenteur de mes réponses, j'ai été plutôt occupé ces temps-ci...

    Ceci étant dit,
    merci pour toutes ces corrections, je vais tenter de les adapter à mon programme on on verra ce que ça donnera.

    je vous réécrit pour vous dire si ça marche comme je l'espère.

    A+

    Charley

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je ne trouves pas les emplacements où enregistrer les macros sur le disque dur. Est-ce normal ?

    Pourquoi faut-il faire ces enregistrements, et non pas travailler seulement dans visual basic?

    Ce que je veux réaliser comme programme, car ça n'a pas l'air d'être clair, est de créer une facture informatique pour la boutique à laquelle je travaille. Ça faisait parti de mon stage et j'ai besoin d'informations supplémentaires afin de le compléter.

    étant une facture, il doit y avoir un numéro d'associé à cette facture (d'où le numéro automatique) qui augmente à chaque fois qu'une nouvelle facture est ouverte à partir du modèle.

    Par la suite, j'aimerais que la facture s'enregistre automatiquement, en fichier excel (et non en fichier modèle) en la fermant sous le nom du client (contenu d'une cellule).

    Est-ce plus clair ?

    A bientôt

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu peux enregistrer tes modèles où tu veux. Le tout c'est qu'Excel les retrouve.
    Chez moi, comme je suis un type rangé, je les place là où Excel les attend par défaut, c'est à dire dans "C:\Program Files\Microsoft Office\Modèles"
    Tu fais une recherche dans l'explorateur Windows avec *.xlt et tu en trouveras aussi ailleurs. Là, on ne peut pas le faire pour toi.
    Tu as ouvert les deux fichiers joints et corrigé le code comme je te l'ai mis, parce que là, je l'ai testé et ça fonctionne.

Discussions similaires

  1. insérer un bouton dans une feuille excel lié à une fonction vba
    Par thierry_b dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/06/2009, 12h14
  2. [VBA-E] Problème pour insérer des lignes dans une feuille Excel
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 14h13
  3. Réponses: 9
    Dernier message: 19/02/2007, 20h33
  4. [VBA-E]trie(suppression de doublons) dans une feuille excel
    Par TANIE dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/08/2006, 13h25
  5. [VBA]Userform mobile dans une feuille excel
    Par fikren dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/10/2005, 15h45

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