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 !

Rechercher des sujets similaires à "erreur macro ecriture conditions"