Langage VBA boucles

kokola12 Messages postés 1 Statut Membre -  
jordane45 Messages postés 30427 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.
.

1 réponse

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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