Langage VBA boucles

kokola12 Messages postés 1 Statut Membre -  
jordane45 Messages postés 40050 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, je révise pour mon partiel d'info, et j'ai énormément de mal à faire cet exercice. Voici la consigne :

Créer une macro-commande permettant
? de parcourir la feuille Absences afin d'extraire les absents de chacune des séances. Si l'étudiant est absent alors recopier son nom et son prénom sur la feuille de la séance correspondante en colonne A pour le nom et B pour le prénom à partir de la ligne 2
? de compter le nombre d'absents à la séance
? d'inscrire ce nombre et la séance en ligne 1 de chacune des feuilles séances
A noter :
Toutes les feuilles des séances correspondant aux différentes séances existent
Le nombre d'étudiants varie chaque année. La macro-commande doit en tenir compte
Le tableau des absences de la feuille Absences est une base de données au sens informatique du terme (aucune colonne et aucune ligne entièrement vide)
? Associer un bouton à cette macro-commande. Ce bouton doit être placé sur la feuille Absences en O10

Pour l'instant j'arrive à ça :
Sub absence()

Dim i, j

Sheets("S1").Cells(1, 1) = Nom
Sheets("S1").Cells(1, 2) = Prénom
Sheets("Absences").Select
j = 2

For i = 1 To 50

If Not IsEmpty(Cells(i, "C")) Then
j = j + 1
Sheets("S1").Cells(j, "A") = Sheets("Absences").Cells(i, "A")
Sheets("S1").Cells(j, "B") = Sheets("Absences").Cells(i, "B")
End If
Next i

End Sub


Si quelqu'un avait la gentillesse de m'aider :(

Merci beaucoup !

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.
.
A voir également:

1 réponse

jordane45 Messages postés 40050 Date d'inscription   Statut Modérateur Dernière intervention   4 759
 
Bonjour,

1 - **** Attention ****
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

.

2 - Le code devrait ressembler à un truc du genre je pense :
Sub absence()
Dim Absences As Worksheet
Dim oSh As Worksheet
Dim l As Long
Dim c As Long
Dim RowToCopy As Long
Dim Seance As String
Dim lastCol As Long
Dim NbAbs As Long 'Nombre d'absents
NbAbs = 0

Set Absences = ThisWorkbook.Sheets("Absences")
'Dernière ligne du tableau Absences
 LastR = Absences.Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
 lastCol = Absences.Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column

'On boucle sur les colonnes de la feuille Absence
For c = 3 To lastCol '(colonnes S1 S2 ...)
Seance = Absences.Cells(1, c).Value
Set oSh = ThisWorkbook.Sheets(Seance)
    'On boucle sur les lignes de la feuille Absences
    For l = 2 To LastR
       ' On récupère le nom de la séance (ligne 1 colonne...x )
        If Not IsEmpty(Absences.Cells(l, c).Value) Then
         'premiere ligne vide de la feuille de séance
         RowsToCopy = oSh.Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
         'on copie le nom / prenom
          oSh.Cells(RowToCopy, "A").Value = Absences.Cells(l, "A").Value
          oSh.Cells(RowToCopy, "B").Value = Absences.Cells(l, "B").Value
          NbAbs = NbAbs + 1
        End If
    Next
    MsgBox "Il y a " & NbAbs & " absents dans la séance " & Seance
Next

End Sub

0