Exercice N° 2 (Coloration suivant clic cellule)


#1

Bonjour,

2ème exercice à réaliser

En cliquant sur une des cellules sur la plage B2 à J10
il faut coloriser en jaune la ligne et la colonne en rapport avec la cellule
et mettre en rouge le texte de la cellule sélectionnéesi la cellule n’est pas vide,
sinon colorisez en vert.

Si je clique sur la colonne A, ou la ligne 1, ou en dehors du tableau,
rien ne doit se passer

Mais, si je rajoute ou supprime un Prénom et/ou un Matériel
la plage doit suivre, d’où le fait de la rendre dynamique

Uniquement en V.B.A.

Colorisation sur clic cellule.xlsx (12,0 Ko)


#2

Bonjour,
Un début en réflexion

Il me faut déjà la dernière cellule vide des lignes ET des colonnes :wink:


#3

Salut @Mimimathy :blush:

Tu es à fond dès le matin!
Merci pour tes propositions d’exercices, c’est vraiment👍
J’avoue que je suis pas assez autonome en vba pour me prêter au jeu, tu aurais un site à me recommander pour me (re)familiariser avec les bases?

En tous cas, bien joué @mdo100 pour les multiplications!


#4

Salut Nono,

En fouillant sur YouTube, tu en trouveras des centaines :wink:


#5

Je suis dessus :grin:

Bon j’ai pondu un truc mais c’est pas au point, je colore toute ligne/colonne même en dehors de la plage (en même temps vu que j’ai rien déclaré, c’est normal)

Un début de quelque chose ?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells.Interior.ColorIndex = 43
    With Target
        .EntireRow.Interior.ColorIndex = 6
        .EntireColumn.Interior.ColorIndex = 6
    End With
End Sub

#6

Salut @Nono,:wink:

Les félicitations du jury, c’est pour la solution par formule ? :blush:
Parce que si c’est pour le VBA, y’a encore du boulot :upside_down_face:

Cordialement.


#7

Salut @mdo100

Les deux mon capitaine :grin::grin:
Ta solution par formule est impec ! Après pour le vba, je suis moins calé que toi!

A bientôt !


#8

@Nono,

Ok :white_check_mark: Merci :blush:

Je m’y met aussi, mais en première vitesse :crazy_face:
@+


#9

Re, Nono

C’est un bon début, :+1:
avec la recherche de la dernière ligne et dernière colonne tu tiens le bon bout

Mais les cellules de l’onglet doit rester sans couleur
Jaune sur un “X”
Vert si pas de “X”
et ne pas dépasser les limites du “X”


#10

Merci @Mimimathy :slight_smile:
Je vais essayer de m’y remettre cette aprem (c’est l’heure de me bouger :grin: )

:tired_face::tired_face::tired_face: ca va être dur!

Et ça, ca va être hard :joy:

J’espère que tu vas pas avancer trop vite @mdo100 histoire que j’ai le temps de rentrer et de trouver la solution :wink:


#11

Re @Mimimathy,

    'Private Sub Worksheet_Change(ByVal Target As Range)
    Sub test()
    Dim Dl%, Dc% 'Déclaration des variables

    Dl = Range("A" & Rows.Count).End(xlUp).Row 'Denière ligne
    'Dc = Range("1" & Columns.Count).End(xlRight).Column 'Dernière colonne vers la droite
   End Sub

Comme tu le vois, j’ai voulu chercher la dernière colonne vers la droite avec cette instruction:
Dc = Range("1" & Columns.Count).End(xlRight).Column
Mais ça fonctionne pas!
Why ?


#12

Re,
Why?

Range contient entre guillemets l’adresse de la cellule sous par la colonne et sa ligne
tu as mis Range(“1”… il ne trouve pas la colonne 1, elle n’existe pas
donc, si tu veux continuer avec Range, il faut partir avec l’adresse complète, pour trouver le Nb colonne depuis une ligne contenant des cellules remplies sur toutes les colonnes la ligne 1 par exemple
ou
en prenant la fonction CELLS(ligne,colonne que tu comptes) jusque à la fin et en revenant tout à gauche (xlto…)


#13

@Mimimathy,

Comme ça peut-être ?

Dc = Cells(1, Cells.Columns.Count).End(xlToLeft).Column

De toute façon, je ne sais pas encore si ses instructions me serviront !

Je pensais plutôt a utiliser CurrentRegion à partir de “A1”, mais je bloque.


#14

Re,

:+1: C’est tout à fait comme cela

Et Dl et Dc te servira pour préciser ta plage de travail qui ira de la ligne 2- colonne 2, à la dernière ligne et dernière colonne, ainsi tu n’auras pas de changement en dehors de cette plage (et sera dynamique si tu rajoute une ou + colonne ou ligne)

Il te faut maintenant trouver sur quelle ligne et colonne se trouve la cellule cliquée :wink:

et tu auras toutes les infos pour coloriser


#15

@Mimimathy,

Bon je suis loin du compte, car encore une fois, je n’arrive pas a mettre ma Dl et Dc dans ma plage afin de l’a rendre dynamique.

Par contre en me documentant, j’ai trouvé comment remplacer Range par [xx:yy] c’est déjà ça de pris.

Donc j’arrive à colorer en jaune la ligne et colonne à l’intersection de la cellule active, j’arrive à colorer en rouge la valeur de la cellule active ainsi que la mettre en gras.

Par contre si la cellule active est vide, je n’arrive pas a colorer en vert l’intersection de la cellule active.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Dl%, Dc%
 Dl = ActiveCell.Column - 2
 Dc = ActiveCell.Row - 2
 
  If Not Application.Intersect(Target, [B2:J10]) Is Nothing Then
   [B2:J10].Interior.ColorIndex = xlNone
  
   Range(ActiveCell.Address, ActiveCell.Offset(0, -Dl).Address).Interior.ColorIndex = 6
   Range(ActiveCell.Address, ActiveCell.Offset(-Dc, 0).Address).Interior.ColorIndex = 6
  
    [B2:J10].Font.Bold = False
    [B2:J10].Font.ColorIndex = xlAutomatic
    ActiveCell.Font.Bold = True
    ActiveCell.Font.ColorIndex = 3
  
 End If
 
End Sub

@+


#16

Re

:+1: Tu deviens bon

un coup de pouce
quand tu fais un formule sur le Tableur avec SI()
tu inscrits =SI( condition=vrai; résultat pour vrai, sinon résultat pour faux)

en VBA c’est presque pareil
if condition then
le résultat vrai —> couleur en jaune - police rouge
else (pour sinon)
autre résultat --> couleur en vert
end if

Ensuite ne pas oublier de remettre les couleurs à l’origine avant la recolorisation

Mais, c’est déjà une trés bonne approche du final :heart_eyes:


#17

Bonjour
Il reste les deux lignes de code les plus difficile, j’avoue que j’ai fait tout ce que j’ai dans le sac
mais un débutant reste Nul
Très bonne continuation à mdo100

Bonne Journée


#18

Bonjour a tous
@Mimimathy , @mdo100 , @sadi58 , @Nono

@Mimimathy peut être une question bête et stupide est ce que l’exercice peut ce faire sur Excel 2010 car j’ais

recopier le code de @mdo100 et j’ais un bug “424” objet requis :tired_face:

Cdlt

@kiss6


#19

Re,

Autant pour moi je n’avais pas mis le code au bon endroit désolé

Voila ce que j’ais changer sur le code de @mdo100 ce n’ais pas grand chose mais c’la ressemble un peut

plus a l’image de @Mimimathy

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Dl%, Dc%
Dl = ActiveCell.Column - 1
Dc = ActiveCell.Row - 1

If Not Application.Intersect(Target, [A1:J10]) Is Nothing Then
[A1:J10].Interior.ColorIndex = xlNone

Range(ActiveCell.Address, ActiveCell.Offset(0, -Dl).Address).Interior.ColorIndex = 6
Range(ActiveCell.Address, ActiveCell.Offset(-Dc, 0).Address).Interior.ColorIndex = 6

[B2:J10].Font.Bold = False
[B2:J10].Font.ColorIndex = xlAutomatic
ActiveCell.Font.Bold = True
ActiveCell.Font.ColorIndex = 3

End If

End Sub

et maintenant il faut trouver le font VERT

Désoler sur le retard car je n’ais pas trop le temps d’être sur le forum en ce moment mais je suivrais vos

cours VBA @Mimimathy avec grand plaisir

cdlt

@kiss6


#20

Bonjour à tous
Bonjour Kiss

Ah Oui, un peu de mieux j’ai la colonne A et la ligne 1 en plus,
Mais si je clique dans la colonne A ou la ligne 1, il ne doit pas coloriser et modifier l’ancien clic
si cellule =“X” en jaune et police rouge, si vide, en vert
Et si je rajoute une ligne ou une colonne, il faut rendre dynamique