VBA : Prise en compte du résultat et non de la formule

Bonjour,

Je possède un fichier excel contenant un tableau filtrant automatiquement en fonction de la valeur d'une cellule, quelqu'un de ce forum (désolé d'avoir oublié son nom) m'a fournis ce code qui marche à merveille !

Private Sub Worksheet_Change(ByVal Target As Range)
Me.Unprotect "2311"
Set isect = Application.Intersect(Target, Range("G$2"))
If Not isect Is Nothing Then Call Filtre_G5
End Sub

Sub Filtre_G5()
With Sheets("Liquide")
crt = .Range("$G$2").Value
 If crt <> "" And Not IsError(Application.Match(crt, .Range("A:A"), 0)) Then
  .Range("$A$7:$T$7").AutoFilter Field:=1, Criteria1:="=" & .Range("$G$2").Value, Operator:=xlAnd
 Else
  .Range("$A$7:$T$7").AutoFilter Field:=1
 End If
End With
Me.Protect "2311"
End Sub

Mon soucis : mes besoins ont changés depuis lors, désormais la cellule G2 qui et utilisé pour entrer la valeur qui permet le tri automatique, doit contenir une formule.

Or avec ce VBA, le tri ne fonctionne pas si j'utilise une formule en G2, la valeur prise en compte est surement la formule en elle même et non le résultat.

J'aimerais donc que le tri se fasse en fonction du résultat de cette formule en G2.

J'ai eu beau chercher une solution sur le net, impossible de résoudre mon problème, je m'en remet donc à vous...

Bonjour,

attention à ceci

Private Sub Worksheet_Change(ByVal Target As Range)
Me.Unprotect "2311"
Set isect = Application.Intersect(Target, Range("G$2"))
If Not isect Is Nothing Then Call Filtre_G5
End Sub

cela veut dire que tu ne re-protège pas ta feuille !

Pour le reste, peux-tu mettre un bout de fichier ?

Bonjour,

attention à ceci

Private Sub Worksheet_Change(ByVal Target As Range)
Me.Unprotect "2311"
Set isect = Application.Intersect(Target, Range("G$2"))
If Not isect Is Nothing Then Call Filtre_G5
End Sub

cela veut dire que tu ne re-protège pas ta feuille !

Pour le reste, peux-tu mettre un bout de fichier ?

Bonjour Steelson, meric pour ta réponse.

Le VBA ne fonctionne pas si la feuille est protégée, j'ai donc

Me.Unprotect "2311"

Puis à la fin du code pour re-protéger :

Me.Protect "2311"

Cela ne fonctionne pas ainsi pour re-protéger le fichier à la fin ?

- Concernant le "bout de fichier", il s'agit d'un fichier contenant des données d'entreprise confidentielles donc voici un fichier ressemblant le plus possible à l'original.

la cellule G2 (en vert) contient une formule qui abouti a l'affichage d'un prénom. Le code VBA permet par la suite d'afficher seulement les lignes contenant le même prénom dans la colonne A.

2test.xlsm (15.42 Ko)

Puis à la fin du code pour re-protéger :

Me.Protect "2311"

Cela ne fonctionne pas ainsi pour re-protéger le fichier à la fin ?

je ne le vois pas à la fin de ta macro si isect Is Nothing

Il faut remonter Me.Protect "2311" dans ta première macro

je regarde le reste à partir du fichier

Une macro événementielle Private Sub Worksheet_Change(ByVal Target As Range) ne se déclenchera que sur les valeurs entrées manuellement et pas sur le résultat. Il faut donc tester le changement des "contributeurs".

Il faut donc que tu mettes ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
Me.Unprotect "2311"
Set isect = Application.Intersect(Target, Union(Range("I2"), Range("I4")))
If Not isect Is Nothing Then Call Filtre_G5
Me.Protect "2311"
End Sub

Sub Filtre_G5()
With Sheets("Feuil1")
crt = .Range("$G$2").Value
 If crt <> "" And Not IsError(Application.Match(crt, .Range("A:A"), 0)) Then
  .Range("$A$7:$T$7").AutoFilter Field:=1, Criteria1:="=" & .Range("$G$2").Value, Operator:=xlAnd
 Else
  .Range("$A$7:$T$7").AutoFilter Field:=1
 End If
End With
End Sub

et laisser libre la modification en I2 et I4

25test.xlsm (16.80 Ko)

ça marche parfaitement et c'est exactement ce que j'esperais !

Un grand merci à toi, mes connaissances on un peu évoluer concernant le VBA, même si elles restent minimes c'est toujours ça !

Encore merci, vraiment !

Merci pour ce retour

Rechercher des sujets similaires à "vba prise compte resultat formule"