Fonction qui ne marche pas à partir d'une macro événementielle

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 !

Magic_Doctor

XLDnaute Barbatruc
Bonjour à tous,

J'ai rédigé une fonction qui permet tout simplement de vérifier si une valeur se trouve ou pas dans une colonne donnée d'un tableau. Si la valeur s'y trouve ---> renvoie 1 ; dans le cas contraire ---> renvoie 0.

J'ai testé la fonction et elle semble, ma foi, très bien marcher.
En revanche, quand je l'appelle à partir d'une macro événementielle, ça ne marche plus du tout...
En pièce jointe un classeur où j'explique plus en détail le problème.

Merci d'avance pour votre aide.
 

Pièces jointes

Re : Fonction qui ne marche pas à partir d'une macro événementielle

Bonjour

En utilisant le pas à pas on constate que tout fonctionne correctement "pourcent" est bien lancé.
Il faut pour trouver l'erreur mettre un point d'arrêt (F9) sur "Application.ScreenUpdating = False" faire une modification dans la feuille, ensuite en mode pas à pas vérifier l'évolution des valeurs.

z = TROUVEDANSCOL("Encabezado", "TABLEAU", 1, [ConcY1].Value)
On recherche dans la colonne 1 les données étant dans la colonne B/C

JP
 
Dernière édition:
Re : Fonction qui ne marche pas à partir d'une macro événementielle

Bonjour Magic_doctor

Salut JP

Modifier:

Code:
Set plage = Range(FirstCel.Address & ":" & LastCel.Address) 'toute la colonne choisie du tableau

en
Code:
Set plage = Sheets("Hoja2").Range(FirstCel.Address & ":" & LastCel.Address) 'toute la colonne choisie du tableau
 
Re : Fonction qui ne marche pas à partir d'une macro événementielle

Bonsoir Magic_Doctor, jp14, le forum,
Un essai de solution sur le fichier joint pour la feuille « Hoja2 » , si j’ai compris la demande.
Cordialement,
Bernard
 

Pièces jointes

Re : Fonction qui ne marche pas à partir d'une macro événementielle

Re

Et bien plus simple:

Code:
'Set FirstCel = Range(NomTableau).Cells(1, col)
'Set LastCel = Range(NomTableau).Cells(i, col)
'Set plage = Sheets("Hoja2").Range(FirstCel.Address & ":" & LastCel.Address) 'toute la colonne choisie du tableau
Set plage = Range(NomTableau)
 
Re : Fonction qui ne marche pas à partir d'une macro événementielle

Bonjour jp14,

J'ai beau, par exemple, supprimer "Application.ScreenUpdating = False" (qui, du reste, ici ne sert pas à grand chose), le problème persiste.

En revanche, si dans la procédure "Pourcent" je déclare "z = 1", le texte redevient NOIR et fatalement définitivement NOIR quelle que soit la valeur recherchée.
Je mets maintenant "z = 1" en REM et le texte reste définitivement ROUGE, et ce quelle que soit la valeur recherchée.
Je ne comprends pas pourquoi, mais, à l'intérieur de cette procédure, la fonction "TROUVEDANSCOL" n'a pas l'air d'être lue correctement, car quand on l'utilise comme formule dans la feuille, elle fonctionne parfaitement.
 
Re : Fonction qui ne marche pas à partir d'une macro événementielle

Bonsoir bbb38 & pierrejean,

Nos posts se sont croisés...

J'ai ouvert le classeur de bbb38 et, ma foi, le problème persiste.
Ta 1ère solution pierrejean fonctionne parfaitement ; en effet je devais stipuler sur quelle feuille aller. Les plages étant nommées, je ne pensais pas que ce fut nécessaire.
En revanche, j'ai bien essayé ta 2ème solution, mais elle se heurte à un problème : si, dans le tableau et en dehors de la 1ère colonne, il y a par hasard une valeur qui soit identique à celle que nous cherchons uniquement dans la 1ère colonne, même si cette valeur ne figure pas dans la 1ère colonne, le texte devient NOIR alors qu'il devrait être ROUGE.

Je conserve donc ta 1ère solution et te remercie pour ton aide.
 

Pièces jointes

Re : Fonction qui ne marche pas à partir d'une macro événementielle

Re,

Petit rectificatif de la fonction "TROUVEDANSCOL" à l'attention de ceux qui pourraient être intéressés...
 

Pièces jointes

Re : Fonction qui ne marche pas à partir d'une macro événementielle

Re

Seconde solution adaptée pour n'avoir que la première colonne du tableau:

Code:
Set plage=Range(NomTableau).Resize(, 1)
 

Pièces jointes

Dernière édition:
Re : Fonction qui ne marche pas à partir d'une macro événementielle

Bonjour
Salut PierreJean

Normalement une fonction peut être utilisée dans toutes les feuilles du classeur et elle s'applique à la feuille active. Si on utilise le code range dans le corps de la fonction on aura des problèmes.
Le plus simple est de passer les zones dans l'argument.

La fonction se réduit à
Code:
Function TROUVEDANSCOL2(valeur_cherchee As Range, Zone_de_recherche As Range) As Byte
'Vérifie si une valeur se trouve bien dans une colonne donnée d'un tableau
'Si la valeur s'y trouve : renvoie 1, dans le cas contraire : 0
Dim cel As Range
Application.Volatile
TROUVEDANSCOL2 = 0
For Each cel In Zone_de_recherche
    If cel.Value = valeur_cherchee.Value Then TROUVEDANSCOL2 = 1
Next

End Function

JP
 
Re : Fonction qui ne marche pas à partir d'une macro événementielle

Bonjour pierrejean & jp14,

Pierrejean, j'ai essayé ta solution qui a singulièrement allégé la fonction.
Le problème est que la recherche de la valeur ne peut se faire que pour la 1ère colonne.
En effet, au départ je recherche si une valeur se trouve UNIQUEMENT dans la 1ère colonne. Je bidouille une fonction qui fini par marcher, mais en profite pour que dans son paramétrage l'on puisse choisir la colonne où se fait la recherche. On peut, en effet, très bien choisir de vérifier si une valeur est présente dans UNIQUEMENT la 2ème colonne ou, pourquoi pas, la 36ème si elle existe.
Ta méthode sélectionne bien la 1ère colonne si je choisis de faire une recherche dans cette colonne, mais si je veux faire une recherche dans, par exemple, la 5ème colonne, la recherche ne se fera pas UNIQUEMENT sur la 5ème colonne mais de la 1ère colonne à la 5ème colonne incluse.
Quant à la solution de jp14, j'ai l'impression que ce n'est ni plus ni moins que la fin de la procédure. Il faut auparavant, dans le paramétrage de la fonction, définir la zone exacte de recherche, ce qui est fait au sein de la fonction que j'ai rédigée.
 
Dernière édition:
Re : Fonction qui ne marche pas à partir d'une macro événementielle

Bonjour Magic Doctor, bonjour à tous,

Juste en l'absence de pierrejean.

Si l'on veut faire une recherche dans la colonne n du tableau utiliser :

Code:
Set plage = Range("NomTableau").Columns(n)
ou

Code:
Set plage = [NomTableau].Columns(n)
A+
 
Re : Fonction qui ne marche pas à partir d'une macro événementielle

Bonsoir job,

Merci d'intervenir dans ce fil.

J'ai essayé d'adapter la fonction "TROUVEDANSCOL" avec tes conseils, mais curieusement ça plante. Où me serais-je bien planté ?

Ci-joint un classeur avec ancienne version (2) et un autre avec une tentative de tes modifications (2').
 

Pièces jointes

Re : Fonction qui ne marche pas à partir d'une macro événementielle

Bonsoir

Bonjour pierrejean & jp14,


Quant à la solution de jp14, j'ai l'impression que ce n'est ni plus ni moins que la fin de la procédure. Il faut auparavant, dans le paramétrage de la fonction, définir la zone exacte de recherche, ce qui est fait au sein de la fonction que j'ai rédigée.

Effectivement la procédure n'a plus de sens, il suffit d'utiliser cette fonction dans la feuille désirée. La mise à jour se fait automatiquement par suite du code "Application.Volatile" la fonction est recalculée lorsque les contenus des cellules change.

JP
 
Re : Fonction qui ne marche pas à partir d'une macro événementielle

Re,

Les "colonnes" de ton tableau (il y en a 9) ne se suivent pas...

En effet il y a des cellules fusionnées et des colonnes masquées.

Tu as dû prendre de l'opium, Doctor, pour faire ça 🙂

Alors il faut convertir le numéro de colonne. Essaie ta macro modifiée ainsi :

Code:
Sub SelectColonne()
'Sélectionne la colonne choisie
Dim col As Byte
col = val([G16])
If col = 0 Or col > 9 Then MsgBox "Colonne inexistante...": Exit Sub 'si nécessaire...
col = Array(1, 3, 6, 8, 10, 12, 14, 16, 18)(col - 1) 'conversion
[TABLEAU].Columns(col).Select
End Sub
Pour le reste, je te laisse bosser.

A+
 
- 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

Discussions similaires

Réponses
3
Affichages
951
Retour