Bonjour à tous !
Très très grand débutant en VBA, je dois écrire pour le travail plusieurs macros en VBA, et je ne m’en sors pas du tout avec juste le générateur de macro …
J’ai un classeur qui contient plusieurs onglets, comme par exemple « ACTIVITÉS D'ÉVALUATION », « ACTIVITÉS ÉDITORIALES », « ACTIVITÉS PÉDAGOGIQUES », etc.
Chaque onglet contient un tableau avec des en-têtes comme « Nom », « Prénom », Numéro d’équipe », « Nature de l’activité », « Nom du projet », etc.
Une collègue ira sur un onglet (par exemple « ACTIVITÉS D'ÉVALUATION »), filtrera le tableau par numéro d’équipe, (par exemple « Equipe 01 ») ou par nom d’auteur (« Golf ») pour appeler les données du-dit tableau, puis cliquera sur un bouton « Export » appelant une macro VBA.
Cette macro devra :
- Me compter le nombre de lignes dans le tableau filtré, pour que la macro m’indique combien d’activités ont été rédigées par l’équipe.
(Par exemple : L'équipe n°XX a rédigé XX activité(s) d'évaluation.)
- Ecrire une phrase en prenant les informations du tableau qui se trouve dans l’onglet « ACTIVITÉS D'ÉVALUATION »
(Pour donner un résultat type : Emmanuel Golf de l'Équipe 01 a participé(e) à un(e) Reviewing pour Blood, le 09/04/2019, pour le laboratoire LaboSympaN1, concernant l'article ArticleBofBof1 de la revue Blood.)
Copier cette phrase dans la cellule A5 de la feuille « impression ».
Retourner sur « ACTIVITÉS D'ÉVALUATION ».
Écrire la même phrase que précédemment, mais à la ligne, et avec les données de la ligne 5, 6, 7, etc. et les copier sur les cellules en dessous jusqu’à ce qu’il n’y ait plus de lignes dans le tableau filtré.
La feuille « impression » est en format A4, et comprendra plusieurs boutons qui appelleront des scripts pour exporter cette feuille en PDF ou en word. Il faut que tout soit mise en forme automatiquement donc.
J’ai donc commencé le script suivant, mais malheureusement ça bloque :
Le fichier Excel en PJ,Tableau-pour-export.xlsm
Un grand merci
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 Private Sub ACTDEVALpdf_Click() 'compter le nombre de lignes filtrées du tableau nbdelignes = Sheets("ACTIVITÉS D'ÉVALUATION").Range("C65536").End(xlUp).Row 'indiquer ce nombre dans une cellule 'Le probleme est que cette formule me donne le nombre total de lignes, et pas le nombre de lignes filtrées. Worksheets("impression").Activate Worksheets("impression").Range("B3").Select Selection.Value = nbdelignes 'prendre les éléments du tableau, et les concaténer dans une phrase Worksheets("ACTIVITÉS D'ÉVALUATION").Activate Dim Nom As String Dim Prenom As String Dim Equipe As String Dim NatureActivite As String Dim NomProjet As String Dim DateEval As Date Dim NomLabo As String Dim NomArticle As String Dim NomRevue As String Dim Responsabilite As String Dim NomInstance As String Dim Precisions As String Dim Phrase As String Nom = Range("A$4").Value Prenom = Range("B$4").Value Equipe = Range("C$4").Value NatureActivite = Range("D$4").Value NomProjet = Range("E$4").Value DateEval = Range("F$4").Value NomLabo = Range("G$4").Value NomArticle = Range("H$4").Value NomRevue = Range("I$4").Value Responsabilite = Range("J$4").Value NomInstance = Range("K$4").Value Precisions = Range("L$4").Value If J$4 = "Oui" Then 'ajouter un bout de phrase si "Oui" est présent dans la colonne J (J4, J5, ...) : Phrase = "- " &Nom& " " &Prenom& " de l'"&Equipe& " a participé(e) à un(e) "&NatureActivite&" pour "&NomProjet&", le "&DateEval&", pour le laboratoire "&NomLabo&", concernant l'article "&NomArticle&" de la revue "&NomRevue&". Cette personne a eu une responsabilité d'évaluation pour "&NomInstance&", "&Precisions&"." Else 'Si "non" est renseigné en J4, J5,..., mettre un point. Phrase = "- " &Nom& " " &Prenom& " de l'"&Equipe& " a participé(e) à un(e) "&NatureActivite&" pour "&NomProjet&", le "&DateEval&", pour le laboratoire "&NomLabo&", concernant l'article "&NomArticle&" de la revue "&NomRevue&"." End If 'Coller cette phrase dans une cellule Worksheets("impression").Activate Worksheets("impression").Range("A4").Select Selection.Value = Phrase 'Mettre la cellule en forme : 'Renvoyer à la ligne automatiquement Columns("A:A").WrapText = True 'Fusionner et centrer les cellules Range("A:A").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge 'Passer à la ligne suivante 'Je bloque, mettre une boucle For ? Mais je ne vois pas comment la mettre en forme ? 'Lorsque la ligne est vide, tout arrêter et se positionner sur la feuille "impression" Sheets("impression").Select End Sub
Partager