Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VBA] Macros

urgent

    19 décembre 2006 à 19:59:17

    Je vous solicite ce soir afin de demander votre aide...
    En effet je dois rendre pour vendredi un dossier d'informatique sur des macros Visual Basic.
    J'ai deux macros que je n'arrive pas à faire.Si vous pouvez m'aider ca me sauve la vie.

    Voici la première:

    1.Créez une macro permettant de créer dans un classeur, une feuille par jour pour un mois et une année donnée(saisie par l'utilisateur par le biais d'un inputbox).Utilisez la fonction Dateserial().

    Voici la deuxième:

    2.Concevoir une macro permettant de supprimer les feuilles pour lesquelles la date saisie dans la cellule B1 est inférieure à une date saisie par l'utilisateur(saisie par le biais d'un inputbox).

    Voila.Si vous pouvez m'aider c'est vraiment GENIAL car la j'y arrive vraiment pas et j'aiu pas mal de boulot à coté en ce moment.
    Merci beaucoup.

    • Partager sur Facebook
    • Partager sur Twitter
      20 décembre 2006 à 11:33:01

      Salut,

      Quels sont les problemes que tu as rencontres ? Sans savoir ou se trouve la difficulte, on ne peut pas vraiment t'aider. Tu en as pour une heure en etant bien concentre. Voici un debut de solution (parmi tant d'autres).

      Macro 1:
      - Creer une fonction te renvoyant le nombre de jour dans le mois. Il y a different moyen de la faire, mais a l'aide de date serial, tu peux avoir le dernier jour du mois d'une date passee en parametre. Sachant que le mois debute necessairement le premier...

      Function LastDayOfMonth(ByVal pv_Date_Date As Date) As Date

         On Error GoTo LastDayOfMonth_Error

          LastDayOfMonth = CDate(DateSerial(Year(pv_Date_Date)Month(pv_Date_Date) + 10))

         On Error GoTo 0
         Exit Function

      LastDayOfMonth_Error:

          MsgBox "Error: " & Err.Number & " (" & Err.Description & ") in procedure LastDayOfMonth of Module Module_API"
          Err.Clear
         
      End Function

      Cette fonction admet une date en parametre. Tu auras donc a utiliser dateserial avant son appel.

      - Creer une fonction pour creer (et nommer) un classeur

      - creer une fonction pour creer une feuille. Tu peux l'ecrire de maniere a creer les feuilles une part une (avec une boucle au-dessus)

      public sub CreateSheet(byval p_String_SheetName as string)

      end sub


      ou alors en creer jusqu'a un certain point (avec une boucle en-dessous).

      public sub CreateSheet(byval p_Integer_UpperBound as integer‚ byval p_Integer_LowerBound as integer)

      end sub


      Il ne te restera plus qu'a rassembler le tout dans une macro qui se chargera de recuperer le mois et l'annee

      Tu trouveras les infos sur la creation de classeur/feuille ici (en) et la (fr)

      Macro 2: Une simple fonction qui detruit une feuille. Tu trouveras comment faire dans les liens ci-dessus. La macro bouclera sur l'ensemble des feuilles presente et appelera ta fonction si necessaire.

      Reviens par ici si tu a un quelconque probleme, ou si je n'ai pas ete clair sur un point.

      Bon courage
      • Partager sur Facebook
      • Partager sur Twitter
        21 décembre 2006 à 9:54:17

        Merci pour ton aide mais ce niveau est quand meme bien supérieur au mien et je ne comprend vraiment pas tout...^^
        Mais merci quand meme je vais plancher la dessus.

        PS:Je n'arrive pas du tout à faire la deuxième macro...
        Pour le moment j'ai un truc du type:



        date=inputbox("Entrez une date")
        nbFeuil = 0
        For i = 0 To sheets.Count1
             If sheets(i + 1).range("B1").value < date Then
                  activesheet.delete
                  nbFeuil = nbFeuil + 1
             end If
        Next



        Mais ceci ne marche pas...
        A l'aide!!!
        • Partager sur Facebook
        • Partager sur Twitter
          22 décembre 2006 à 14:58:42

          Salut,

          Ton code detruit les feuilles, mais ne remet pas a jour leur nombre.

          For i = 0 To sheets.Count - 1


          Apres avoir detruit une feuille. sheets.count devient faux, et provoque un depassement

          En esperant qu'il n'est pas trop tard....

          Voici un bout de code (tres proche) de la solution final. Il ne reste plus q'une ligne a ajouter.

          '---------------------------------------------------------------------------------------
          ' Procedure : LocateSheet
          ' DateTime  : 12/01/2006 13:50
          ' Author    : sandrew
          ' Purpose   : Localise les feuilles ayant une date (dans la cellule en parametre) anterieure a celle de l'input (), et les detruit
          ' Call      :
          ' Parameters: Ligne et colonne de la cellule a verifier
          ' Return    : un tableau contenant les numero des feuilles verifiant les criteres
          '---------------------------------------------------------------------------------------
          '
          Public Sub LocateSheet(ByVal l_Integer_Ligne As Integer, ByVal l_Integer_Colonne As Integer)

              Dim l_Integer_Counter As Integer 'Compteur pour parcourir les feuilles
              Dim l_IntegerArray_SheetNumber() As Integer 'Tableau contenant le numero de certaine feuille
              Dim l_Integer_ArraySize As Integer 'Taille du tableau precedent
              Dim l_String_InputDate As String

             On Error GoTo LocateSheet_Error

              'Recuperation de la date a tester
              l_String_InputDate = InputBox("Entrez une date")
              l_Integer_ArraySize = 0

              'Enregistrement des feuilles verifiant le critere
              For l_Integer_Counter = 1 To (ThisWorkbook.Sheets.Count)
             
                  If CDate(ThisWorkbook.Sheets(l_Integer_Counter).Cells(l_Integer_Ligne, l_Integer_Colonne).Value) < CDate(l_String_InputDate) Then
                       
                       'On fait de la place dans le tableau, et on ajoute le dernier element trouve
                       l_Integer_ArraySize = l_Integer_ArraySize + 1
                       ReDim Preserve l_IntegerArray_SheetNumber(l_Integer_ArraySize)
                       l_IntegerArray_SheetNumber(l_Integer_ArraySize) = l_Integer_Counter
                       
                  End If
               
              Next l_Integer_Counter

              'destruction des feuilles.... A completer
              'Ici, j'affiche juste leur nom
              For l_Integer_Counter = 1 To UBound(l_IntegerArray_SheetNumber)
             
                  MsgBox ThisWorkbook.Sheets(l_IntegerArray_SheetNumber(l_Integer_Counter)).Name
             
              Next l_Integer_Counter

             On Error GoTo 0
             Exit Sub

          LocateSheet_Error:

              Select Case Err.Number
             
                  ' Le tableau n'a jamais ete initialise: Aucune feuille ne verifie le critere
                  Case 9: MsgBox "Aucune Feuile de detruite"
                 
                  Case Else:
             
                      MsgBox "Error: " & Err.Number & " (" & Err.Description & ") in procedure LocateSheet of Module Module1"
                      Err.Clear
                     
              End Select

          End Sub


          Son utilisation:


          Public Sub test()

              Call LocateSheet(1, 2)

          End Sub


          Bon Courage et Bonne Fete
          • Partager sur Facebook
          • Partager sur Twitter
            22 décembre 2006 à 16:59:03

            J'ai reussi à le faire marcher.Merci beaucoup...
            • Partager sur Facebook
            • Partager sur Twitter

            [VBA] Macros

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown