1 pièce(s) jointe(s)
Compter un nombre de lignes, concaténer une phrase avec variables, et boucle
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,Pièce jointe 478884
Un grand merci :)
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
|
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 |