VBA If ne s'éxecute pas sur la bonne feuille

Résolu/Fermé
yohannj Messages postés 71 Date d'inscription samedi 31 mars 2007 Statut Membre Dernière intervention 29 août 2011 - 15 août 2011 à 22:25
yohannj Messages postés 71 Date d'inscription samedi 31 mars 2007 Statut Membre Dernière intervention 29 août 2011 - 16 août 2011 à 20:38
Bonjour,

Mon code commence par:
Sub ClasseEtRangeDonnées()
Call Prendre_items


Voici la début de la fonction Prendre_items:
Public Function Prendre_items()
For i = 2 To 2699
If Range("H" & i) = "N" Then



Mon classeur contient 3 feuilles qui sont "links", "N" et "M". Le problème est que la ligne " If Range("H" & i) = "N" Then " vérifie la condition sur la page "N" alors que j'aimerais que la vérification se fasse sur la page "links". Je pensais que " If Range("links!H" & i) = "N" Then " allait résoudre le soucis mais j'ai un code erreur. J'ai aussi tenté ce que j'ai vu et qui ressemble à " Sheets("links").Activate " mais le problème persiste.

Si besoin du doc excel, le voici:
https://www.cjoint.com/?3HpwsE3AiII

J'utilise excel 2010.


Auriez vous une solution svp?



Merci d'avance pour votre réponse.
A voir également:

8 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
15 août 2011 à 23:18
Bonjour,

Et as-tu bien saisi le rôle et le but d'une fonction ?
J'ai l'impresssion quelles sont utilisées à tort et à travers...

Une fonction, on lui passe 1 ou plusieurs paramètres et elle retourne une valeur.
A aucun moment tu ne leur passes de paramètres, à aucun moment tu leur fais retourner une valeur...
De plus elles doivent être obligatoirement déclarées dans un module.
J'ai l'impression que tu n'as besoin que de sub...

Eric
1
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
16 août 2011 à 11:00
Bonjour,
Vous remplacez la ligne :
If Range("H" & i) = "N" Then
Par celle-ci:
If Sheets("links").Range("H" & i) = "N" Then
1
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
Modifié par Le Pingou le 15/08/2011 à 23:10
Bonjour,
Depuis où vous déclenchez vous la procédure ?

Au passage, à quoi vous sert : Public Function RAZ()

Salutations.
Le Pingou
0
yohannj Messages postés 71 Date d'inscription samedi 31 mars 2007 Statut Membre Dernière intervention 29 août 2011 6
15 août 2011 à 23:18
Je lance la procédure depuis VBA avec le bouton "Exécuter la macro". (Et accessoirement le "Pas à pas détailler" pour déterminer où était le soucis)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
15 août 2011 à 23:34
Bonjour,
Merci.
Donc, selon votre réponse la procédure prendra comme référence la feuille active du classeur et dans ce cas on ne sait pas ce que la procédure doit exactement réaliser.... !
Concernant les fonctions, je rejoins les propos d'eriiic (salutations).
Désolé, pas possible de faire plus.
0
yohannj Messages postés 71 Date d'inscription samedi 31 mars 2007 Statut Membre Dernière intervention 29 août 2011 6
16 août 2011 à 00:14
"Au passage, à quoi vous sert : Public Function RAZ()"

Elle me permet de limiter le nombre de variable. J'utilise les même 2 fois pour des actions différentes. ça m'a permis d'éviter un code erreur qui me disait que j'utilisais trop de variables.



"Et as-tu bien saisi le rôle et le but d'une fonction ?"
Je n'y ai pas réfléchie du tout ici. En le lisant je me dit que c'est évident vu que le seule endroit où j'utilise des fonctions habituellement est lié au maths en utilisant le logiciel Maple.
Au début j'avais tout mis dans le sub mais j'avais un code erreur me disant qu'il y avait trop de choses dedans. J'ai regardé sur internet et j'ai vu qu'on pouvait contourner le problème en faisant des fonctions. J'ai appliquer sans réellement réfléchir et sans chercher une manière de faire un sous programme.
Je n'ai pas non plus saisi le rôle et le but du sub. J'ai de très faible connaissance en basic et quick basic et j'ai essayé de me débrouiller avec ce que je connaissais.... mais ça n'as vraiment pas l'air de suffire.



"la procédure prendra comme référence la feuille active du classeur"
En me plaçant sur la feuille "links" ou en utilisant " Sheets("links").Activate " (ou WorkSheets("links").Activate ou avec Select au lieu de Activate), ça continue de vérifier la condition sur la feuille "N"


Désolé, c'est ma première utilisation de VBA et vu que je ne pense pas l'utiliser régulièrement avant 1 an et je n'ai pas chercher à me renseigner sur son fonctionnement avant de me lancer.
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
16 août 2011 à 10:45
Bonjour,
Merci pour les informations.
Toutefois elle n'explique pas depuis où vous lancer votre procédure et ce que vous voulez réaliser ... !
Je vais regarder votre fichier et essayer de vous trouver une solution pour [vérifie la condition sur la page "links"].
0
yohannj Messages postés 71 Date d'inscription samedi 31 mars 2007 Statut Membre Dernière intervention 29 août 2011 6
Modifié par yohannj le 16/08/2011 à 20:38
Merci beaucoup!

J'ai aussi vu 3 autres erreurs que j'avais fais et j'ai raccourcie le code (surtout en enlevant toutes les variables) qui ne tient plus que sur 60 lignes et il n'y a plus de fonctions.
C'est bien plus sain et ça limite bien le temps de calcul qui reste important.


Encore une fois, merci à vous deux!
0