piga25
XLDnaute Barbatruc
Bonjour,
Automatiser la réponse en fonction de l'état d'une cellule.
le problème est comment mettre :
Indiquer « Fin » si et seulement si :
Le premier tableau commence à la ligne 25, le second à la ligne 45, le 3ème à la ligne 65 et ainsi de suite.
Chaque tableau contient quatre petits tableaux représentant une équipe à chaque fois : colonnes C,D et E ; G, H et I ; K, L et M et le dernier en O, P et Q.
Les numéros des grands tableaux sont situés en colonne B (B25, B45, B65 et ainsi de suite).
L’état des missions de chaque équipe est situé sur la ligne 27, puis 47, puis 67 et ainsi de suite (C27, G27, K27 et O27)
Donc mettre fin si en colonne E, I, M et Q et cela dans chaque petit tableau soit 16 lignes.
Automatiser la réponse en fonction de l'état d'une cellule.
le problème est comment mettre :
Indiquer « Fin » si et seulement si :
- la mission de l’équipe est « Terminée »
- la cellule située 2 colonnes à gauche est renseignée
- Ne pas effacer si la cellule est déjà renseignée.
Le premier tableau commence à la ligne 25, le second à la ligne 45, le 3ème à la ligne 65 et ainsi de suite.
Chaque tableau contient quatre petits tableaux représentant une équipe à chaque fois : colonnes C,D et E ; G, H et I ; K, L et M et le dernier en O, P et Q.
Les numéros des grands tableaux sont situés en colonne B (B25, B45, B65 et ainsi de suite).
L’état des missions de chaque équipe est situé sur la ligne 27, puis 47, puis 67 et ainsi de suite (C27, G27, K27 et O27)
Donc mettre fin si en colonne E, I, M et Q et cela dans chaque petit tableau soit 16 lignes.
- La cellule n’est pas déjà renseignée.
- La mission indique « Terminée »
- Et que 2 colonnes avant (C, G, K, O) soit renseigné.
VB:
Sub AjouterFinSiMissionTerminee()
Dim ws As Worksheet
Dim derniereLigne As Long
Dim ligneTableau As Long
Dim colonneMission As Long
Dim colonneFin As Long
Dim colonneIntervenant As Long
Dim i As Long
Dim ligneDonnees As Long
' Définir la feuille de calcul
Set ws = ThisWorkbook.Sheets("Equipe") ' Nom de la feuille
' Trouver la dernière ligne utilisée dans la colonne B (pour déterminer le nombre de tableaux)
derniereLigne = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
' Boucle à travers chaque tableau (tous les 20 lignes)
For ligneTableau = 25 To derniereLigne Step 20
' Boucle à travers chaque équipe dans le tableau (4 équipes par tableau)
For i = 0 To 3
' Définir les colonnes pour chaque équipe
Select Case i
Case 0 ' Première équipe
colonneMission = 3 ' Colonne C
colonneFin = 5 ' Colonne E
colonneIntervenant = 2 ' Colonne B
Case 1 ' Deuxième équipe
colonneMission = 7 ' Colonne G
colonneFin = 9 ' Colonne I
colonneIntervenant = 6 ' Colonne F
Case 2 ' Troisième équipe
colonneMission = 11 ' Colonne K
colonneFin = 13 ' Colonne M
colonneIntervenant = 10 ' Colonne J
Case 3 ' Quatrième équipe
colonneMission = 15 ' Colonne O
colonneFin = 17 ' Colonne Q
colonneIntervenant = 14 ' Colonne N
End Select
' Boucle à travers chaque ligne de données de l'équipe
For ligneDonnees = ligneTableau + 3 To ligneTableau + 18 ' Lignes 28 à 43, 48 à 63, etc.
' Vérifier l'état de la mission et la présence d'un intervenant
If ws.Cells(ligneTableau + 2, colonneMission).Value = "Terminée" And _
ws.Cells(ligneDonnees, colonneIntervenant).Value <> "" And _
ws.Cells(ligneDonnees, colonneFin).Value = "" Then
' Écrire "Fin" dans la colonne de fin
ws.Cells(ligneDonnees, colonneFin).Value = "Fin"
End If
Next ligneDonnees
Next i