Résolu Boucle VBA qui ne termine pas sa tâche

  • Auteur de la discussion Eglantine63000
  • Date de début

Eglantine63000

Nouveau membre
Bonjour,

Je réalise un second tableau à partir d'un premier grâce à une macro.
Une des choses à effectuer est de donner une couleur spécifique pour chaque pays dans l'ensemble du tableau.

Tout se déroule parfaitement SAUF que le code ne colore JAMAIS la dernière ligne du tableau.

Voici mon code de la boucle :

Code:
Sheets("FINAL").Select 'Pour mettre en couleur les Pays présents dans le Tableau
    
    FinLigne = ActiveSheet.UsedRange.Rows.Count
    NumeroLigne = 2
    
    While NumeroLigne < FinLigne
    If Range("A" & NumeroLigne).Value = "France" Then Range("A" & NumeroLigne, "D" & NumeroLigne).Interior.Color = 65535
    If Range("A" & NumeroLigne).Value = "Belgique" Then Range("A" & NumeroLigne, "D" & NumeroLigne).Interior.Color = 5296274
    If Range("A" & NumeroLigne).Value = "Maroc" Then Range("A" & NumeroLigne, "D" & NumeroLigne).Interior.Color = 255
    If Range("A" & NumeroLigne).Value = "Suisse" Then Range("A" & NumeroLigne, "D" & NumeroLigne).Interior.Color = 15773696
    
    NumeroLigne = NumeroLigne + 1
    
    Wend
                
    Range("A1").Select

End Sub

D'avance merci pour votre aide !!!
 

Eglantine63000

Nouveau membre
Meilleure réponse
Désolé pour le dérangement !!! Après une dernière lecture du code, je viens de voir que le < doit être <= !!!

Désolé encore !!!
 

zeb

Modérateur
Salut Eglantine.
Sois la bienvenue.

------------------------------------

Je me permets quelques commentaires sur ton code. Si ça peut t'aider.
Evite de traiter l'objet en cours. Sait-on jamais, il peut changer (autre macro, popup divers, action utilisateur.)
Code:
FinLigne = Sheets("FINAL").UsedRange.Rows.Count

N'utilise plus While/Wend qui sont obsolète.
Utilise maintenant Do While/Loop.
Toute ta collection de If pourrait être avantageusement remplacée par un Select Case

Permets-moi de te présenter une autre façon d'intérer dans tes lignes :

Code:
Dim row As Range
Dim col As Long

For Each row In Sheets("FINAL").UsedRange.Rows
	Select Case row.Cells(1).Value
		Case "France"   : col = 65535
		Case "Belgique" : col = 5296274
		Case "Maroc"    : col = 255
		Case "Suisse"   : col = 15773696
		Case Else       : col = -1
	End Select
	If col <> -1 Then row.Range(row.Cells(1), row.Cells(4)).Interior.Color = col
Next

Sheets("FINAL").Select
Sheets("FINAL").Range("A1").Select
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 055
Membres
1 586 282
Dernier membre
Yannick3553
Partager cette page
Haut