Reproduire une macro sur plusieurs lignes
Bonjour à tous,
Je suis débutant sur VBA et je cherche à reproduire une macro sur plusieurs lignes. Je m'explique :
J'ai créé un tableau dans lequel j'inscris une liste de candidats, un par ligne. Les colonnes indiquent des critères qu'on peut cocher (en inscrivant un X dans la cellule correspondante). En fonction des critères cochés, un résultat apparait dans la dernière colonne.
Sub variables1()
If Range("K2") = "Fonctionnaire" And Range("AU2") = "X" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "X" Then Range("BA2") = "91"
If Range("K2") = "Fonctionnaire" And Range("AU2") = "" And Range("AV2") = "X" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "X" Then Range("BA2") = "135"
If Range("K2") = "Fonctionnaire" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "X" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "X" Then Range("BA2") = "104"
If Range("K2") = "Fonctionnaire" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "X" And Range("AY2") = "" And Range("AZ2") = "X" Then Range("BA2") = "52"
If Range("K2") = "Fonctionnaire" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "X" And Range("AZ2") = "X" Then Range("BA2") = "0"
If Range("K2") = "Fonctionnaire" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Fonctionnaire" And Range("AU2") = "X" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Fonctionnaire" And Range("AU2") = "" And Range("AV2") = "X" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Fonctionnaire" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "X" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Fonctionnaire" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "X" And Range("AY2") = "" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Fonctionnaire" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "X" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Fonctionnaire" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "X" Then Range("BA2") = "ERREUR CRENEAU"
If Range("K2") = "Contractuel" And Range("AU2") = "X" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "X" Then Range("BA2") = "101.5"
If Range("K2") = "Contractuel" And Range("AU2") = "" And Range("AV2") = "X" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "X" Then Range("BA2") = "153"
If Range("K2") = "Contractuel" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "X" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "X" Then Range("BA2") = "116"
If Range("K2") = "Contractuel" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "X" And Range("AY2") = "" And Range("AZ2") = "X" Then Range("BA2") = "58"
If Range("K2") = "Contractuel" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "X" And Range("AZ2") = "X" Then Range("BA2") = "0"
If Range("K2") = "Contractuel" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Contractuel" And Range("AU2") = "X" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Contractuel" And Range("AU2") = "" And Range("AV2") = "X" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Contractuel" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "X" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Contractuel" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "X" And Range("AY2") = "" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Contractuel" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "X" And Range("AZ2") = "" Then Range("BA2") = "0"
If Range("K2") = "Contractuel" And Range("AU2") = "" And Range("AV2") = "" And Range("AW2") = "" And Range("AX2") = "" And Range("AY2") = "" And Range("AZ2") = "X" Then Range("BA2") = "ERREUR CRENEAU"
End SubCe que dit ce code parfaitement moche, par exemple, c'est que si le candidat est fonctionnaire et qu'une croix est marquée dans les cellules AU2 et AZ2, alors le chiffre "91" sera inscrit dans la cellule BA2.
Ca marche super sur toute la ligne 2. Peu importe les critères que je coche, ça m'inscrit le bon chiffre. Top. Mais j'aimerais que cette macro s'applique à chaque candidat donc à chaque ligne. Comment qu'on fait ?
Merci à tous !
Bonjour PlainVanilla, le forum,
Une simple boucle for devrait répondre à ton besoin...
https://www.excel-pratique.com/fr/vba/boucles
Si tes données commencent à la ligne 2 et se termine à la ligne 10 :
Sub variables1()
Dim i As Integer
For i = 2 To 10
If Range("K" & i) = "Fonctionnaire" And Range("AU" & i) = "X" And Range("AV" & i) = "" And Range("AW" & i) = "" And Range("AX" & i) = "" And Range("AY2") = "" And Range("AZ2") = "X" Then Range("BA" & i) = "91"
Next i
'.....la suite....
End SubCordialement,
Nom de Zeus, ça marche !
Merci beaucoup !
Salut PlainVanilla,
Salut Xorsankukai,
petite solution VBA plus complète...
- 1 clic en [K:K] crée une liste de validation pour choisir le type de candidat ;
- 1 clic en [AU:AZ] marque ou efface l'option désirée. Si il y a déjà 2 X, il faudra d'abord effacer l'un de ceux-ci pour faire un autre choix ;
- un double-clic sur la feuille recalcule le tout.
Sub Calcul(ByVal iRow%)
'
If Range("AZ" & iRow) = "" Then
Range("BA" & iRow).Value = 0
Else
Range("BA" & iRow).Value = "ERREUR CRENEAU"
For x = 1 To 5
If Range("AT" & iRow).Offset(0, x).Value <> "" Then _
Range("BA" & iRow).Value = IIf(Range("K" & iRow).Value = "Fonctionnaire", Choose(x, 91, 135, 104, 52, 0), Choose(x, 101.5, 153, 116, 58, 0))
Next
End If
'
End Sub
A+