Mise en forme conditionnel

A

Arverne

Guest
Bonjour forum, Bonjour à tous

Je débute en VBA, j'ai voulu réaliser rapidement un petit programme pour m'aider en anglais.
Principe:
Sur la feuille 2 de mon classeur j'ai une liste de mot en anglais sur la colonne A avec leur traduction dans la colonne B.
La Macro indique un mot sur la feuille 1 colonne A et il faut saisir sa traduction en colonne B.
Bon,c'est sans prétention mais cela ne fonctionne pas.
En effet, j'ai pensé utiliser la mise en forme conditionnel, mais celà fonctionne pas si on utilise une autre feuille.

Savez vous comment je puis faire ?

Toute suggestion ou amélioration est la bienvenue.

Merci d'avance !


Code:
Sub Macro2()
Dim NbreDeMot As Integer
Dim Ligne As Integer
Dim Colonne As Integer
Dim DerniereLigne As Integer
Dim MotATraduire As String
Dim Col As String

    'Nombre de mot à traduire
    NbreDeMot = Sheets(2).UsedRange.Cells(Sheets(2).UsedRange.Count).Row
    Randomize
    'Selectionne le mot a traduire
    Ligne = Int((NbreDeMot - 1 + 1) * Rnd + 1)
    'Selectionne le sens a traduire
    Colonne = Int((2 - 1 + 1) * Rnd + 1)
    
    MotATraduire = Sheets(2).Cells(Ligne, Colonne)
    
    'Récupère la derniere ligne de la feuille d exercice
    DerniereLigne = Sheets(1).UsedRange.Cells(Sheets(1).UsedRange.Count).Row + 1
    
    'Affiche le mot a traduire
    Sheets(1).Cells(DerniereLigne, 1) = MotChoisi
    
    If (Colonne = 1) Then
    Col = 'B'
    Else
    Col = 'A'
    End If
    
    'Mise en forme conditionnel : Mettre en Vert si le mot saisie est bien traduit
    Sheets(1).Cells(DerniereLigne, 2).FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:='=Feuil2!$' & Col & '$' & Ligne
    'Sinon il est en rouge
    Sheets(1).Cells(DerniereLigne, 2).FormatConditions(1).Font.ColorIndex = 10
    
End Sub
:)
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir Arverne,

Peut-être pourrais-tu essayer un code comme celui-ci :

Code:
Option Explicit

Sub Macro2()
'
Dim NbreDeMot As Integer
Dim Ligne As Integer
Dim Colonne As Integer
Dim DerniereLigne As Integer
Dim MotATraduire As String
Dim Col As String
'
  Sheets(1).Select
  'Nombre de mot à traduire
  NbreDeMot = Sheets(2).UsedRange.Rows.Count
  Randomize
  'Selectionne le mot a traduire
  Ligne = Int(NbreDeMot * Rnd + 1)
  'Selectionne le sens a traduire
  Colonne = Int(2 * Rnd + 1)
  
  MotATraduire = Sheets(2).Cells(Ligne, Colonne)
  
  'Récupère la derniere ligne de la feuille d exercice
  DerniereLigne = Cells(65536, 1).End(xlUp).Row + 1
  
  'Affiche le mot a traduire
  Cells(DerniereLigne, 1) = MotATraduire
  
  If (Colonne = 1) Then
    Col = 'B'
  Else
    Col = 'A'
  End If
  
  'Mise en forme conditionnelle : Mettre en Vert si le mot saisi est bien traduit
  With Sheets(1).Cells(DerniereLigne, 2)
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:=Sheets(2).Range(Col & Ligne).Text
    .FormatConditions(1).Font.ColorIndex = 10
    'Sinon il est en rouge
    .FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, Formula1:=Sheets(2).Range(Col & Ligne).Text
    .FormatConditions(2).Font.ColorIndex = 3
  End With
End Sub

Il y a matière à faire plus concis mais moins facile à lire ;)

A+
 

Discussions similaires

Réponses
1
Affichages
199
Réponses
5
Affichages
246
Réponses
0
Affichages
178

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 520
Messages
2 089 298
Membres
104 092
dernier inscrit
karbone57