Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Boucle For If Next

pierrof

XLDnaute Occasionnel
Bonsoir tout le monde

Je voudrais à l'aide d'un code VBA réaliser une boucle me permettant de renseigner une case vide en fonction de la valeur d'une autre case, ci dessous le code faux. erreur next sans For
Merci de vos explications

Cordialement

For P = Cells.SpecialCells(xlCellTypeLastCell).Row To 2 Step -1
If Cells(P, "i").Value = "tata" And Cells(P, 10).Value = "" Then
Cells(P, 10).Value = "A"
Else
If Cells(P, "i").Value = "toto" And Cells(P, 10).Value = "" Then
Cells(P, 10).Value = "B"
Else
If Cells(P, "i").Value = "titi" And Cells(P, 10).Value = "" Then
Cells(P, 10).Value = "C"
Else
If Cells(P, "i").Value = "juju" And Cells(P, 10).Value = "" Then
Cells(P, 10).Value = "D"
Else
If Cells(P, "i").Value = "jojo" And Cells(P, 10).Value = "" Then
Cells(P, 10).Value = "E"
Else
If Cells(P, "i").Value = "gigi" And Cells(P, 10).Value = "" Then
Cells(P, 10).Value = "F"
End If
Next P
 

Dranreb

XLDnaute Barbatruc
Re : Boucle For If Next

Bonjour.
Supprimez des caractères derrière les Else jusqu'à ce qu'ils forment le mot clé ElseIf avec le If de la ligne suivante ainsi ramenée sur la même ligne.

Ou mieux faite un Select Case Cells(P, "I").Value puis Case "Toto": etc. Terninez par End Select
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Boucle For If Next

Ben ça s'écrirait comme ça :
VB:
For P = Cells.SpecialCells(xlCellTypeLastCell).Row To 2 Step -1
   If IsEmpty(Cells(P, 10).Value) Then
      Select Case Cells(P, "i").Value
         Case "tata": Cells(P, 10).Value = "A"
         Case "toto": Cells(P, 10).Value = "B"
         Case "titi": Cells(P, 10).Value = "C"
         Case "juju": Cells(P, 10).Value = "D"
         Case "jojo": Cells(P, 10).Value = "E"
         Case "gigi": Cells(P, 10).Value = "F"
         End Select
      End If
   Next P
Mais ce n'est probablement pas comme ça que je ferais. J'utiliserais un tableau et un Dictionary.
 

cathodique

XLDnaute Barbatruc
Re : Boucle For If Next

Bonjour Pierrof, Dranreb,

@Dranreb
Mais ce n'est probablement pas comme ça que je ferais. J'utiliserais un tableau et un Dictionary.
Malgré que ça ne soit pas ma discussion, je suis intéressé par ta solution avec un tableau et un dictionnaire.

En te remerciant par avance.

Bon dimanche.
 

Dranreb

XLDnaute Barbatruc
Re : Boucle For If Next

Bonjour.
Oui, tout ce qui minimise le nombre de fois qu'on accède aux cellules est bon à prendre. C'est la construction de l'objet Range qui est couteuse en temps.
Il vaut mieux charger en une seule instruction des dizaines de milliers de cellules dans un tableau en mémoire que d'exécuter à peine une vingtaine d'instructions qui fabriquent chaque fois un objet Range représentant une seule cellule.
Une boucle ensuite sur les éléments du tableau n'est nullement pénalisante. Sauf s'il y a plusieurs boucles imbriquées.
Il y a aussi le système With Range(…): .FormulaR1C1 = "=…": .Value = .Value: End With qui minimise ce nombre d'accès.
Des Cells(…) dans une boucle c'est vraiment le pire. Même un For Each Cel In Range(…) est très légèrement préférable car au moins comme ça il ne fabrique qu'une seule fois l'objet Range qui représente toute la plage.
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
362
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…