Macro Excel 2007

Résolu
evevdll Messages postés 81 Date d'inscription   Statut Membre -  
evevdll Messages postés 81 Date d'inscription   Statut Membre -
Bonjour à toute et tous,

Je ne connais que très peu le langage des macros mais j'essaie un peu et me débrouille.
Cependant, j'ai besoin d'aide car l'enregistreur de macro ne fait pas tout le travail.

J'ai créé une macro qui copie ma feuille (Facture) qui est mon modèle de base en nouvelle feuille (du même classeur) et la nomme selon une valeur qu'il trouve dans une cellule (E090101) soit le numéro de facture.

Cependant, quand je créé une nouvelle facture si j'ai oublié de modifier le numéro de facture, j'aimerai qu'il vérifie si ce numéro (qui va devenir le nom d'une nouvelle feuille du classeur) n'existe pas déjà dans le classeur car sinon la macro ne fonctionne pas à cause des doublons de noms de feuille.
Je ne sais pas comment écrire la macro car il faut poser une condition.

De plus, j'ai besoin qu'il vérifie que la cellule C12 de ma feuille Facture ne soit pas vide lors de la macro.

Si quelqu'un peut m'aider, je lui serait très reconnaissante.
Merci d'avance,
Eve
Configuration: Windows XP
Internet Explorer 7.0

4 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    Un exemple de ce que tu pourrais faire avec ton n° de facture dans ("Feuil1").[A1] :
    Sub test()
        ok = True
        For Each w In Worksheets 'contrôle si n° non utilisé
            If w.Name = Worksheets("Feuil1").[A1] Then
                ok = False
                Exit For
            End If
        Next w
        If Not ok Then
            MsgBox ("N° facture déjà utilisé")
        ElseIf Worksheets("Facture").[C12].Value = "" Then 'contrôle de C12
            MsgBox ("C12 vide")
        Else
            'Call ton_sub
        End If
    End Sub

    eric
    0
    1. evevdll Messages postés 81 Date d'inscription   Statut Membre 51
       
      Merci Eric,
      Je vais tester tout de suite en espérant placer le code à la bonne place.
      Je te confirmerai si j'ai réussi
      Bonsoir,
      Eve
      0
  2. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 564
     
    Bonsoir

    Pourquoi ne pas faire une incrémentation automatique de numéro ?... Il n'y aurait pas à gérer ce type d'erreur...
    Une idée en passant ! ;)

    m@rina
    0
    1. evevdll Messages postés 81 Date d'inscription   Statut Membre 51
       
      Bonsoir Marina,
      Merci de ta réponse. j'y avais pensé mais s'il fallait modifier une facture validée, j'ai peur qu'on ne puisse pas revenir sur le numéro manuellement. De plus je ne sais pas comment procéder.
      Si tu le veux, tu peux noter la procédure car elle pourrait m'être utilse pour plus tard.
      je garde les explications que l'on me donne pour éviter de demander trop souvent car j'essaie de m'entrainer seule quand c'est possible.
      Bonne soirée,
      Eve
      0
      1. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 564 > evevdll Messages postés 81 Date d'inscription   Statut Membre
         
        Bonsoir Eve,

        Pour cela, tu aurais créé une feuille cachée qui contiendrait simplement le numéro à incrémenter.
        Pour un premier usage, ru mets le numéro à la main, 1 par exemple.

        Numero_Fact = [feuille_num!A1]

        La macro irait chercher ce numéro et le copierait dans la cellule de la facture qui doit contenir le numéro :

        [facture!A5].Value = Numero_Fact


        Rien ne t'empêche d'ajouter quelque chose au numéro, une date, une référence...
        puis une fois que l'onglet est créé, la macro incrémenterait le numéro dans la feuille cachée. Ce numéro sera prêt pour la facture suivante.

        [feuille_num!A1] = [feuille_num!A1]+ 1

        Dans ce cas, même si tu veux modifier un numéro d'une facture quelconque, ça ne gêne absolument rien.

        m@rina
        0
      2. evevdll Messages postés 81 Date d'inscription   Statut Membre 51 > m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merci,
        Pas mal mais mes numéros seront sous la forme :

        E090101 : E pour initiale, 09 pour l'année, 01 pour le mois et 01 pour le numéro à incrémenter

        ou alors peut-être :
        E09001 : E pour initiale, 09 pour l'année, 001 pour le numéro à incrémenter

        J'ai essayé et ça marche mais pas pour ma numérotation personnelle.
        Je garderai quand même tes explications.

        A bientôt,
        Evelyne
        0
      3. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 564 > evevdll Messages postés 81 Date d'inscription   Statut Membre
         
        Re..

        Ah ben ça, c'est pas un problème :

        [facture!A5].Value = "E" & Format(Now, "yymm") & Format(Numfact, "000")


        m@rina
        0
  3. evevdll Messages postés 81 Date d'inscription   Statut Membre 51
     
    Rebonsoir,
    ça marche mais après avoir cliqué sur ok dans la boite de dialogue, il continue quand même la macro avec le bogue.
    Est-il possible d'avoir une boite de dialogue qui propose d'annuler la procédure pour pouvoir revenir sur les valeurs à modifier et redemander la macro ensuite ?
    Si c'est le cas, peux-tu m'indiquer la marche à suivre ?
    Merci d'avance,
    Eve
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Re,

      si tu as copier le code tel que je te l'ai mis il s'arrete. Ta macro doit se lancer dans la partie
      Else
      'Call ton_sub
      End If
      Il faut enlever la ' pour l'appeler avec call.
      Tu dois donc avoir 2 sub :
      sub
      ma macro
      end sub
      et
      sub
      ta macro
      end sub

      eric
      0
      1. evevdll Messages postés 81 Date d'inscription   Statut Membre 51 > eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Bonsoir Eric,
        ok ça marche avec bien du mal (pourtant logique après avoir compris).
        J'ai eu des difficultés car ma macro est très longue et je ne savais pas où placer et convertir pour moi ce que tu m'as donné. J'inscris au fur et à mesure les explications pour des utilisations ultérieures.
        Ce que j'ai fait doit être pour toi très facile mais pour moi un langage que je dois décoder.
        A bientôt j'espère !
        Encore merci
        Evelyne
        0
  4. evevdll Messages postés 81 Date d'inscription   Statut Membre 51
     
    Bonjour à Marina et Eric,
    Je vous remercie de m'avoir aidée avec les macros. Vous avez répondu à mes questions et j'en ai tellement d'autres...
    Je n'ai pas encore fini mon classeur et les macros sont pour moi un langage étranger. J'ai encore beaucoup à faire (je sais que pour vous ce serait rapide mais sans connaissance, c'est très difficile). Je vais essayer de me débrouiller un peu seule avant de vous solliciter de nouveau.
    Encore merci
    Evelyne
    0