Erreur 13 et Macro pour écriture sous conditions
Bonjour a tous,
Je commence sur VBA et également dans ma macro.
Je vous explique ce que j'aimerais faire (simplement) pour l'instant: Si une donnée est inscrite dans la colonne "Imputation" au départ, alors il faut mettre en italique et surligné en jaune.
Une fois cela fait, il faut marquer le nom du module (1,2, 3 ou 4), toujours dans la colonne "Imputation" si rien n'était marqué avant et selon la valeur du nombre dans la colonne pas.
J'ai essayé de faire mon code le plus propre possible mais j'ai une erreur "13" et il ne marche pas...
Mon code est:
Dim i As Integer
i = 2
Dim pas As Byte
Dim nom_module As Long
nom_module = Cells(i, 12).Value
pas = Cells(i, 2).Value
'Surligner en Jaune + Italique les arrêts non HC2
Do While Cells(i, 1).Value <> ""
If Cells(i, 12).Value <> "" Then
Range(Cells(i, 1), Cells(i, 12)).Select
Selection.Font.Italic = True
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
i = i + 1
Loop
'Marquer le bon module selon le pas de l'arrêt
i = 2
Do While Cells(i, 1).Value <> ""
If nom_module <> "" Then
ElseIf pas < 0 And pas <= 5 Then
nom_module = R01
ElseIf pas > 5 And pas <= 10 Then
nom_module = R02
ElseIf pas > 10 And pas <= 16 Then
nom_module = R03
ElseIf pas > 16 And pas <= 20 Then
nom_module = R04
ElseIf pas > 20 Then
Cells(i, 2).Select
ActiveCell.EntireRow.Delete
End If
i = 1 + 1
Loop
Est ce que vous pouvez m'aider sur mes erreurs svp.
Merci d'avance
Bonjour
Macro modifiée d'après ce que j'ai compris
Comme tu veux supprimer des lignes, il vaut mieux commencer à la fin et remonter
Erreur 13 venait que tu avais défini ta variable nom_module en Long alors que dans la colonne L il y avait des chaînes de caractères
A vérifier si c'est le résultat attendu
Sub Mise_En_Forme_Moniteurs()
Dim I As Long
Dim DerLig As Long
DerLig = Range("A" & Rows.Count).End(xlUp).Row
'Surligner en Jaune + Italique les arrêts non HC2
For I = DerLig To 2 Step -1
If Cells(I, 12).Value <> "" Then
With Range(Cells(I, 1), Cells(I, 12))
.Font.Italic = True
With .Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
'.TintAndShade = 0 ' Ne fonctionne pas avec XL 2003
'.PatternTintAndShade = 0 ' Ne fonctionne pas avec XL 2003
End With
End With
Else
'Marquer le bon module selon le pas de l'arrêt
Select Case Cells(I, 2)
Case Is <= 5
Cells(I, 12) = "R01"
Case Is <= 10
Cells(I, 12) = "R02"
Case Is <= 16
Cells(I, 12) = "R03"
Case Is <= 20
Cells(I, 12) = "R04"
Case Else
Rows(I).Delete
End Select
End If
Next I
End Sub
Bonjour Benzai64 et merci beaucoup!
C'est exactement cela que je souhaitais. Je reviendrais surement sur ce forum en cas de probleme pour la suite de ma macro (il va avoir du tableau dynamique ensuite...)
J'aimerais juste avoir ta réponse a trois questions afin que je m'améliore sur VBA:
- C'est mieux de faire des boucles If comme tu as fait que Do While?
- Dans la fonction Case, on fait un test sur Is alors qu'on ne la jamais défini ! Est ce que ca refere toujours a ce qui il y a marqué apres Case ?
- Enfin, comment aurait on pu faire pour définir la valeur de la cellule (I,12) comme nom_module. (Au lieu de marquer Cells(I,12)="R01", comment on aurait pu avoir nom_module)="R01" ? C'est ce que j'avais essayé en marquant:
Dim nom_module as Long
nom_module = Cells(I,12).Value
mais ca marchait pas
Merci pour tes réponses a ces questions et merci pour l'aide !
Bonjour
swer a écrit :- C'est mieux de faire des boucles If comme tu as fait que Do While?
If n'est pas une boucle mais une condition
J'ai remplacé la boucle Do While .... Loop par une boucle For ..... Next
Dans ce cas je connaissais exactement le début et la fin et donc c'était plus simple à utiliser
swer a écrit :- Dans la fonction Case, on fait un test sur Is alors qu'on ne la jamais défini ! Est ce que ca refere toujours a ce qui il y a marqué apres Case ?
Le Is fait partie de l'instruction Case
Essayes de taper seulement
Case <= 10
Dans l'éditeur VB places le curseur sur le mot Case et appuies sur F1
swer a écrit :- Enfin, comment aurait on pu faire pour définir la valeur de la cellule (I,12) comme nom_module. (Au lieu de marquer Cells(I,12)="R01", comment on aurait pu avoir nom_module)="R01" ? C'est ce que j'avais essayé en marquant:
Je ne comprend pas trop, ce que tu veux dire
Au lieu de dire Cells(I,12) tu voudrais dire nom_module , je pense que cela pourrait se faire (pas sur à 100%) en passant par des zones nommées (nom définis) (Dans XL menu Insertion-->Nom--->Définir)
Mais dans ce cas je pense que cela va compliqué le code pour pas grand chose
Merci beaucoup pour ton aide et explication !