[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:
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.