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

Code VBA pour remplissage en couleur si nombre +1

  • Initiateur de la discussion Initiateur de la discussion JJ1
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

JJ1

Guest
Bonsoir à tous,

Suite à mon précédent sujet (merci Job et PierreJean), je colorie maintenant en Feuil2 les nombres qui font une suite arithmétique +1 ( ici en jaune ) à partir d'une cellule donnée (dans mon exemple B25) pour terminer en ligne 1 du tableau.

Les nombres de la suite se comptent sur la ligne égale ou supérieure (pas en redescendant).

J'ai commencé le remplissage manuellement mais trop d'erreurs, un code sera plus fiable.

Il faudrait que je puisse relancer la macro autant de fois que je le souhaite en changeant de couleur (pour différencier les précédentes couleurs de suites) et de cellule de départ.

Dans mon exemple, l'étendue de ma suite va de 1 à 9, donc on part de 7 8 9 1 2 3 4 5 6 7 8 9 1 2 etc..

Si vous pouvez me faire ce code, ça m'aiderait bien dans l'automatisation!
Merci beaucoup et bonne soirée.
 

Pièces jointes

Re : Code VBA pour remplissage en couleur si nombre +1

Bonjour JJ1, le forum,

Il y a 2 solutions possibles, choisir celle que l'on veut :

- valeurs sur une même ligne dans l'ordre

- valeurs sur une même ligne dans le désordre.

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, [A1:E25]) Is Nothing Then Exit Sub
Cancel = True
[A1:E25].Interior.ColorIndex = xlNone
Suivante1 Target 'choisir la macro
'Suivante2 Target
End Sub

Sub Suivante1(Target As Range)
'valeurs sur une même ligne dans l'ordre
Dim i&, suiv As Byte, plage As Range, j As Variant
For i = Target.Row To 1 Step -1
1 Target.Interior.ColorIndex = 6
  suiv = 1 + (Target Mod 9)
  Set plage = Range(IIf(Target.Row > i, Cells(i, 1), Target), Cells(i, 5))
  j = Application.Match(suiv, plage, 0)
  If IsNumeric(j) Then Set Target = plage(j): GoTo 1
Next
End Sub

Sub Suivante2(Target As Range)
'valeurs sur une même ligne dans le désordre
Dim i&, suiv As Byte, j As Variant
For i = Target.Row To 1 Step -1
1 Target.Interior.ColorIndex = 6
  suiv = 1 + (Target Mod 9)
  j = Application.Match(suiv, Cells(i, 1).Resize(, 5), 0)
  If IsNumeric(j) Then Set Target = Cells(i, j): GoTo 1
Next
End Sub
Le lancement se fait par double-clic dans la plage.

Fichier joint.

A+
 

Pièces jointes

Re : Code VBA pour remplissage en couleur si nombre +1

Re,

Je n'ai pas cherché à "changer de couleur" à chaque double-clic !

A mon avis, si l'on veut mémoriser les résultats, le mieux est de faire un copier/coller du tableau vers la droite...

A+
 
Re : Code VBA pour remplissage en couleur si nombre +1

Bonjour Job, le forum,

Merci pour ton code que je vais tester ce soir (ici je n'ai pas excel).

Si je comprends bien:
Je sélectionne la zone et le code colorie en jaune la suite arithmétique.
mais comment je sélectionne la cellule de départ dans ton code (dans mon exemple B25)?
(car je vais la lancer plusieurs fois de suite en changeant de plage et de cellule de départ)?

ps: mes données sont rangées par ligne en ordre croissant, je prends donc l'option 1

Merci de ta réponse et pour ton aide.
Bon AM
 
Re : Code VBA pour remplissage en couleur si nombre +1

Re,

Il n'y a pas à sélectionner la zone.

La sélection du point de départ se fait par le double-clic.

Tu ne parlais pas de plusieurs zones, mais si c'est le cas utilise cette version :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not IsNumeric(Target.Text) Then Exit Sub
Dim zone As Range
Cancel = True
Set zone = Target.CurrentRegion 'zone de nombres où se trouve Target
zone.Interior.ColorIndex = 37 'bleu
Suivante1 zone, Target 'choisir la macro
'Suivante2 zone, Target
End Sub

Sub Suivante1(zone As Range, Target As Range)
'valeurs sur une même ligne dans l'ordre
Dim i&, suiv As Byte, plage As Range, j As Variant
With zone
  For i = zone.Rows.Count To 1 Step -1
1   Target.Interior.ColorIndex = 6 'jaune
    suiv = 1 + (Target Mod 9)
    Set plage = Range(IIf(Target.Row > .Rows(i).Row, .Cells(i, 1), Target), .Cells(i, .Columns.Count))
    j = Application.Match(suiv, plage, 0)
    If IsNumeric(j) Then Set Target = plage(j): GoTo 1
  Next
End With
End Sub

Sub Suivante2(zone As Range, Target As Range)
'valeurs sur une même ligne dans le désordre
Dim i&, suiv As Byte, j As Variant
With zone
  For i = zone.Rows.Count To 1 Step -1
1   Target.Interior.ColorIndex = 6 'jaune
    suiv = 1 + (Target Mod 9)
    j = Application.Match(suiv, .Rows(i), 0)
    If IsNumeric(j) Then Set Target = .Cells(i, j): GoTo 1
  Next
End With
End Sub
Noter que le nombre de lignes et colonnes de chaque zone peut être quelconque.

Fichier joint.

A+
 

Pièces jointes

Re : Code VBA pour remplissage en couleur si nombre +1

Re,

Avec cette 3ème version il faut d'abord sélectionner la zone :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim zone As Range, cel As Range
Set zone = Intersect(Target, [A1:E25])
If zone Is Nothing Then Exit Sub
If zone.Count = 1 Then Exit Sub
[A1:E25].Interior.ColorIndex = xlNone
zone.Select: zone.Interior.ColorIndex = 37 'bleu
On Error Resume Next
1 Set cel = Application.InputBox("Sélectionner la cellule de départ dans la plage colorée :", , , , , , , 8)
If Err Then [A1:E25].Interior.ColorIndex = xlNone: Exit Sub
If Intersect(cel, zone) Is Nothing Or cel.Count > 1 Then GoTo 1
Suivante1 zone, cel 'choisir la macro
'Suivante2 zone, cel
End Sub
Tu as l'embarras du choix.

A+
 

Pièces jointes

Re : Code VBA pour remplissage en couleur si nombre +1

Bonsoir Job,
Je te remercie pour ce travail.
J'ai un peu modifié: la plage (E1000) et le code de la couleur de sélection (blanc pur code 2 pour bien voir le jaune).

Le problème est que si je relance une 2ème fois la macro, la 1ère couleur disparaît, est-il possible de rajouter une boucle en début de code de 10 passages avec les 5 premières sélections code 6 jaune et les 5 suivantes code 33 bleu en laissant l'inputbox 10 fois?
merci beaucoup.
Je te joins le fichier modifié (j'ai ôté la partie "suivante2"non triée)

Bonne soirée
 

Pièces jointes

Re : Code VBA pour remplissage en couleur si nombre +1

Bonjour JJ1,

Bien que ce que tu veux faire ne me paraît guère cohérent (voir mon post #3), j'ai adapté la 1ère macro.

Evidemment on ne pourra pas individualiser les résultats de chaque sélection...

Nota 1 : le compteur n est mémorisé.

Nota 2 : colorer en "blanc" la zone sélectionnée était tout à fait inutile !

Fichier joint.

A+
 

Pièces jointes

Re : Code VBA pour remplissage en couleur si nombre +1

Re,

Ah oui, si l'on veut rester 10 fois sur la même zone sélectionnée, cette version (2).

Le compteur n est maintenant le 3ème argument de la macro Suivante.

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 VBA OptionButton
Réponses
3
Affichages
505
S
Réponses
7
Affichages
2 K
syriak
S
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…