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 :

incrémentation sous excel 2007


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 4
    Points
    4
    Par défaut incrémentation sous excel 2007
    bonjour à tous !!!

    je cherche un code Vba pour créer une macro qui me permettrai de mettre à jour le numéro de facture sur une facture type (dont je vous fournis un exemple en pièce jointe)

    je m'explique plus clairement, sur ce modèle qui est vierge et qui commence à 1 je rentre des données (noms, adresse, produits quantité ....) et j'enregistre sous un autre nom le fichier type ("facture_n° de facture), en l'occurence "facture 1".

    ce que je voudrais c'est que quand je réouvre le classeur type, le numéro de facture se mette à jour automatiquement sur 2 et ainsi de suite à chaque fois que j'enregistre une facture et que je réouvre le fichier type après.

    je pense être clair.

    merci d'avance pour votre aide.

    matthieu.

    ps : je n'arrive pas a mettre la facture type en pièce jointe : c'est un fichier xlsm.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour et bienvenue sur le forum Office de DVP

    Citation Envoyé par matthieu24 Voir le message
    ps : je n'arrive pas a mettre la facture type en pièce jointe : c'est un fichier xlsm.
    Il faut zipper ton fichier.

    Philippe

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    voila c'est fait !!!
    Fichiers attachés Fichiers attachés

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut
    Sans regarder le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_Open()
        'Si le numéro de facture se trouve en A1
        Range("A1").Value = Range("A1").Value + 1
        'Ou [A1] = [A1] + 1
     
    End Sub
    ESVBA

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    merci beaucoup de ta réponse

    le probleme c'est qu'elle ne tient pas compte du numéro de facture de la dernière facture enregistré.

    Ce que je voudrais clairement, c'est qu'a l'ouverture de la facture type (et vierge) la cellule du n° de facture soit incrémenté de 1 (de facon automatique) par rapport au numéro de facture de la dernière facture enregistré.

    Merci

  6. #6
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Si je comprends bien , tu n'as qu'un classeur qui fait office de modèle de facture et qui contient le code.
    A mon avis, tu devrais couper en 2 :
    • un classeur contenant le code = application outil
    • un classeur qui contient le modèle de facture
    D'ailleurs le modèle de facture pourrait aussi être un document Word.

    Dans le classeur outil, dans une feuille de paramètres, éventuellement masquée, tu réserves une cellule au numéro de facture. Cette cellule oeut être nommée.

    A chaque ouverture de facture (bouton 'nouvelle fature'), tu lis la cellule en question et tu l'écris dans la facture.
    Quand tu enregistres la facture, tu incrémentes cette cellule d'1.

    Nota : après édition, tu pourrais aussi enregistrer ta facture en pdf, non modifiable et passe les gestionnaires de messageries.

    Cordialement,

    PGZ

  7. #7
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    non j'ai en fait j'ai 1 classeur modèle (que tu peux regarder). ce classeur contient une macro nommé "enregistrer" (activable par un bouton du même nom).
    Cette macro (enregistrer) permet "d'enregistrer sous" le modèle avec comme nom de fichier "facture_n° de facture". une fois cette macro executé je ferme donc excel completement. Et lorsque je réouvrirai le modèle, je voudrais que le contenu de la cellule numéro de facture soit incrémenté de 1 (automatiquement) par rapport au n° de facture du dernier fichier enregistré suite à l'utilisation de la macro "enregistrer".

    j'espere etre clair.

    merci de votre aide

  8. #8
    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
    Dans ton modèle, que tu devras enregistrer après usage, ne peux-tu pas placer un compteur ?
    Autre solution, un .txt que tu lis à l'ouverture du modèle et que tu incrémentes seulement lors de l'enregistrement ou de l'édition de la facture rédigée.
    C'est d'ailleurs cette solution qui me paraît la plus pérenne.

  9. #9
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    merci de ton aide !!

    en fait j'ai besoin d'un code vba qui me permettrai cette action !! comme un genre de macro qui s'execute a l'ouverture de la facture type et qui verifie automatiquement le numero de la dernière facture enregistré et qui rajoute +1 !!

    merci

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    A priori c'est normal avec votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub effacertout()
        Range("B9,A14:A24,E14:E24").ClearContents
        Range("B9").Select
        Range("B10") = Range("B10") + 1
    ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\facture " & Range("b10")
    End Sub
    
    Sub enregistrer()
    ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\facture " & Range("b10")
    effacertout
    End Sub
    Avec le code en bleu ci-dessus vous enregistrez votre fichier avec le N° de facture en cours, exemple "1".

    Puis vous appelez la procédure "effacertout" dans laquelle vous incrémentez de +1 le N° de facture mais vous ne le sauvegardez pas ?

    Sinon il faudrait ajouter la ligne en rouge dans cette procédure et le fichier à ouvrir serait toujours celui qui à le N° le plus élevé.

    Il y a plusieurs solutions, comme par exemple dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_Open()
    Rechercher le fichier qui a le N° le plus élevé et là utiliser le code de la procédure "effacertout":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("B9,A14:A24,E14:E24").ClearContents
        Range("B9").Select
        Range("B10") = Range("B10") + 1
    puisque vous écrivez :

    une fois cette macro exécutée je ferme donc excel complètement.

  11. #11
    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
    Si tu as fais le reste, créer un txt et incrémenter un n° de facture n'est pas le plus difficile
    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
    Sub FichierTexteLireAjouterEnregistrer()
    Dim laderniere As String
        Close
        On Error Resume Next 'erreur si le fichier n'existe pas
        Do
            If Err <> 0 Then
                laderniere = "0"
                AjouterEnregistrer laderniere 'crée le fichier s'il n'existe pas
                On Error GoTo 0
            End If
            Open "c:\Numéro de facture.txt" For Input As #1
        Loop While Err <> 0
        While Not EOF(1)
            Line Input #1, laderniere
        Wend
        Close
        laderniere = Str(Val(laderniere) + 1)
        AjouterEnregistrer laderniere
     
        MsgBox laderniere 'et là tu récupères le N° incrémenté
    End Sub
     
    Sub AjouterEnregistrer(laderniere As String)
        Open "c:\Numéro de facture.txt" For Output As #1
        Print #1, laderniere
        Close
     
    End Sub
    Bon week-end

    Edit
    Le fait d'utiliser un fichier texte "annexe" évite d'avoir à enregistrer le modèle qui du coup peut être protégé en écriture afin de n'être pas enregistré avec la dernière facture réalisée.

    Cette méthode évite en outre d'avoir à rechercher le N° de la dernière facture puisqu'il te donne le nouveau

  12. #12
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    merci a vous deux pour votre aide !!

    la reponse de jacques jean me convient mieux mais j'ai encore une question (désolé mais je suis un novice).

    Je créé donc la ligne workbook_open (). jusque la ça va (si je me trompe pas c'est bien ce qui va permettre de déclencher cette macro à l'ouverture du classeur).
    Ensuite tu me parle de "Rechercher le fichier qui a le N° le plus élevé" : c'est justement la que je bloque, comment lui faire rechercher le dernier fichier enregistré avec le numéro le plus élevé.

    merci encore pour votre aide!!

  13. #13
    Invité
    Invité(e)
    Par défaut
    En fait il y a une solution très simple, mais voir si elle vous convient :

    Vous avez au départ un fichier "Facture_modele" qui correspond à votre fichier actuel, avec en B10 la valeur 1 et avec ces 2 procédures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub effacertout()
    Application.DisplayAlerts = False
        Range("B9,A14:A24,E14:E24").ClearContents
        Range("B9").Select
        Range("B10") = Range("B10") + 1
        ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\facture_modele"
    Application.DisplayAlerts = True
    End Sub
     
    Sub enregistrer()
    ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\facture " & Range("b10")
    effacertout
    End Sub
    Vous ouvrez ce fichier et après mise à jour vous lancez la procédure.

    Vous n'êtes même pas obligé de fermer le fichier, vous pouvez immédiatement créer une nouvelle facture, mais cela fonctionne évidemment aussi si vous fermez l'application et quand vous relancez.

  14. #14
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    Merci jacques jean !!! ta modif du code marche nikel !!!

    juste une chose, peux tu m'expliquer ce que tu as rajouter : j'entends par la les "Application.DisplayAlerts = False" et les "Application.DisplayAlerts = true" !!

    en attente d'explication ...

    merci beaucoup

  15. #15
    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
    Lors de la fermeture, de la création d'un classeur ou lors de plein d'autres événements, Excel pose des questions "Voulez-vous ? Oui/non... " etc.
    "Application.DisplayAlerts = False"
    sert à suspendre ces questions. On utilise cette instruction quand on sait ce qu'on fait et qu'on ne veut pas qu'Excel s'en mêle
    Bonne journée

  16. #16
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    merci beaucoup pour votre aide !!!

    le sujet est clos.


    merci encore

  17. #17
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    Désolé les gars mais le sujet est réouvert car j'avais oublié une donnée lors de mon explication.

    En effet avec la solution de jacques jean, mon fichier modèle est enregistré avec le prochain numéro de facture à utiliser (si la dernière facture créé est la 18 mon modèle s'enregistre avec le numéro 19, parfait !!)

    par contre si je supprime la facture 18 de mon dossier, mon modèle restera numéroté 19, alors que je voudrais qu'il soit numéroté 18 en remplacement du fichier 18 supprimé. De même sorte que si je supprime la facture 15 et la facture 18 du dossier, j'aimerais bien qu'a l'ouverture du modèle, celui-ci me propose de partir sur la n°15 ou la N°18.

    merci d'avance pour votre aide !!!

    matthieu

  18. #18
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Bien sûr c'est faisable. Mais avant de vous proposer une des solutions :

    A moins que les règles aient beaucoup changé j'avais connaissance de celles-ci :
    Citation:
    La numérotation des factures est réglementée par la loi. On peut citer notamment le Code de Commerce et le Code Général des Impôts (textes sur la TVA qui s'appliquent à toutes les factures même celles des non assujettis).

    On y parle d'une numérotation dans une suite ininterrompue (on dit aussi par itération). L'idée est de ne pas pouvoir ajouter de factures et de ne pas avoir de doubles.
    Donc, à priori, les trous (factures annulées et détruites) ne devraient pas exister.

    On établissait automatiquement un avoir, on dit aussi facture d'avoir, (partiel(le) ou total(e)).

  19. #19
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour à tous,

    On établissait automatiquement un avoir, on dit aussi facture d'avoir, (partiel(le) ou total(e)).
    Je rajouterai qu'en général on ne supprime pas une facture ni si elle est close ni si elle est modifiée, on fait une extourne.

  20. #20
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    je comprends vos messages mais je suis étudiant et je ne suis pas commerçant !!! je n'ai aucunement l'intention de magouiller ou de faire de fausse facture !!!

    merci d'avance pour votre aide !!!

    je veux pas aller en prison ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Lenteurs de macros VBA sous Excel 2007 vs Excel 2003
    Par nicotab dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/11/2007, 18h47
  2. FileSearch sous Excel 2007
    Par laurent.mario dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/10/2007, 19h01
  3. Enregistrer des fichier en DBF sous Excel 2007
    Par filigane dans le forum Excel
    Réponses: 1
    Dernier message: 20/09/2007, 10h56
  4. Une fonction sous Excel 2007 ne fonctionne pas sous Excel 2003
    Par Dryss51 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 27/07/2007, 08h09
  5. [VBA] VBA sous Excel 2007
    Par tangjuncn dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/02/2007, 16h06

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