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-Excel] Simplification de macros ...


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut [VBA-Excel] Simplification de macros ...
    Bonjour à tous,

    Je suis en train de construire un tableau Excel qui permettrait d'automatiser la gestion de diagnostic prénataux (analyses pendant la grossesse) mais surtout la gestion de la paperasserie administrative (obligatoire d'après certains décrets).
    Grace à la FAQ de ce site (qui d'ailleurs est très bien) et de quelques-autres (je débute en VBA), j'ai réussi à "pondre" quelques macros.

    Ma 1ère démarche consiste à extraire de mon tableau certaines lignes en fonction de ce qu'elles contiennent. Ce que j'ai réussi à faire avec les macros suivantes. Est-il possible de regrouper ces 4 macros en 1 seule ? Est-il possible également de lancer l'éxécution sous condition (par exemple, pour la macro FiltreSuivi : ne la lancer que si date d'accouchement est dépassée ...) ?

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    Sub FiltreSuivi()
     
      Dim Lig     As Long
      Dim Col     As String
      Dim NbrLig  As Long
      Dim NumLig  As Long
      Dim date1 As Date
      Dim date2 As Date
     
      Sheets("Pas suivi").Activate ' feuille de destination
     
      Col = "N"                 ' colonne de la donnée non vide à tester
      NumLig = 0
      With Sheets("DPN")     ' feuille source
      NbrLig = .Cells(65536, Col).End(xlUp).Row
      For Lig = 1 To NbrLig
        If .Cells(Lig, Col).Value = "Non" Then
          .Cells(Lig, Col).EntireRow.Copy
          NumLig = NumLig + 1
          Cells(NumLig, 1).Select
          ActiveSheet.Paste
        End If
      Next
     
      End With
     
    End Sub
    Sub FiltreConsentement()
     
      Dim Lig     As Long
      Dim Col     As String
      Dim NbrLig  As Long
      Dim NumLig  As Long
     
      Sheets("Pas consentement").Activate
      ' feuille de destination
     
      Col = "M"                 ' colonne de la donnée non vide à tester
      NumLig = 0
      With Sheets("DPN")     ' feuille source
      NbrLig = .Cells(65536, Col).End(xlUp).Row
      For Lig = 1 To NbrLig
        If .Cells(Lig, Col).Value = "Consentement" Then
          .Cells(Lig, Col).EntireRow.Copy
          NumLig = NumLig + 1
          Cells(NumLig, 1).Select
          ActiveSheet.Paste
        End If
      Next
      End With
     
    End Sub
     
    Sub FiltreAttes()
     
      Dim Lig     As Long
      Dim Col     As String
      Dim NbrLig  As Long
      Dim NumLig  As Long
     
      Sheets("Pas attes").Activate ' feuille de destination
     
      Col = "M"                 ' colonne de la donnée non vide à tester
      NumLig = 0
      With Sheets("DPN")     ' feuille source
      NbrLig = .Cells(65536, Col).End(xlUp).Row
      For Lig = 1 To NbrLig
        If .Cells(Lig, Col).Value = "Attestation" Then
          .Cells(Lig, Col).EntireRow.Copy
          NumLig = NumLig + 1
          Cells(NumLig, 1).Select
          ActiveSheet.Paste
        End If
      Next
      End With
     
    End Sub
    Sub FiltreConsAttes()
     
      Dim Lig     As Long
      Dim Col     As String
      Dim NbrLig  As Long
      Dim NumLig  As Long
     
      Sheets("Pas cons + attes").Activate ' feuille de destination
     
      Col = "M"                 ' colonne de la donnée non vide à tester
      NumLig = 0
      With Sheets("DPN")     ' feuille source
      NbrLig = .Cells(65536, Col).End(xlUp).Row
      For Lig = 1 To NbrLig
        If .Cells(Lig, Col).Value = "Cons. + Attes." Then
          .Cells(Lig, Col).EntireRow.Copy
          NumLig = NumLig + 1
          Cells(NumLig, 1).Select
          ActiveSheet.Paste
        End If
      Next
      End With
     
    End Sub
    Ma 2ème démarche est de lancer un publipostage à partir de ces nouveaux tableaux. J'ai suivi la procédure de silkyroad (http://silkyroad.developpez.com/Exce...eWordExcel/#LX au paragraphe X) qui donne un très bon résultat. Seul problème : sur mes "nouveaux" tableaux (générés par macro), je n'ai pas la ligne de titre de colonnes ce qui me "zappe" le 1er enregistrement. J'ai eu beau décocher la case "La 1ère ligne de données contient les en-têtes de colonnes" (dans la fenêtre de sélection de l'onglet) mais rien n'y fait. Comment résoudre ce problème ?

    Je vous remercie par avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut
    Seul problème : sur mes "nouveaux" tableaux (générés par macro), je n'ai pas la ligne de titre de colonnes ce qui me "zappe" le 1er enregistrement. J'ai eu beau décocher la case "La 1ère ligne de données contient les en-têtes de colonnes" (dans la fenêtre de sélection de l'onglet) mais rien n'y fait. Comment résoudre ce problème ?
    Pour ce problème là, je crois que j'ai trouvé la solution : insérer une ligne et y coller les entêtes de colonne (identiques au tableau originel) avant de faire mon publipostage.

  3. #3
    Membre émérite
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Par défaut
    Bonjour,

    Alors pour répondre à la première question : oui il est possible de les regrouper de 2 manières différentes (à vue de nez).
    - mettre tout le code dans une seule procédure (pas recommanndé)
    - faire une procédure qui appelle les autres

    Je préfère largement la seconde et voici comme cela se présente :
    Code VB : 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 FiltreGlobal()
     
       If (condition sur date accouchement) Then
          Call FiltreSuivi
       End If
     
       If (autre condition) Then
          Call FiltreConsentement
       End If
     
       If (autre condition) Then
          Call FiltreAttes
       End If
     
       If (autre condition) Then
          Call FiltreConsAttes
       End If
     
    End Sub

    Et ceci en plus du code que tu nous as donné.

    Voilà, j'espère que cela pour t'aider

    Bonne continuation

    Théo

  4. #4
    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
    Par défaut
    Pour ton coller/copier, évite les sélections qui ralentissent et allourdissent ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        If .Cells(Lig, Col).Value = "Non" Then
            NumLig = NumLig + 1
            .Cells(Lig, Col).EntireRow.Copy Destination:=Rows(NumLig & ":" & NumLig)
    A+

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut
    Ca marche tout comme il faut ...
    de votre aide à tous les deux.

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

Discussions similaires

  1. [VBA Excel] Associer N macros à N boutons suite à un événement
    Par Vorillyan dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 24/11/2006, 08h46
  2. [VBA-EXCEL]Exécution de macro
    Par fab78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/08/2006, 12h55
  3. [VBA-excel]Probleme de macro pour creer un graphique.
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/07/2006, 15h42
  4. [VBA Excel] Une même macro pour plusieurs CheckBox
    Par Choupett' dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/06/2006, 13h54
  5. [VBA/Excel] Formule via macro
    Par UNi[FR] dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/10/2005, 15h11

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