IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur 1004 sur une methode Find


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 25
    Par défaut Erreur 1004 sur une methode Find
    Bonjour à tous,

    J'essaye de faire fonctionner une méthode find qui me permettrait de récupérer la ligne d'une valeur trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Function donnee(ValeurLineTarget, ValeurColumnTarget, ValeurLineSource, ValeurColumnSource, FileSource, SheetsSource, FileTarget, SheetsTarget)  'La Fonction donnee me permet de copier la cellule d'un fichier dans un autre fichier
    Dim Source As Range                                   'Je declare ma cellule Sources
    Dim SearchLineSource As Object
    Dim SearchColumnSource As Object
    Dim SearchLineTarget As Object
    Dim SearchColumnTarget As Object
    Dim LineSource As Integer
    Dim ColumnSource As Integer
    Dim LineTarget As Integer
    Dim ColumnTarget As Integer
    Workbooks(FileTarget).Activate
    Set SearchLineTarget = Workbooks(FileTarget).Worksheets(SheetsTarget).Range("A1;Z500").Find(ValeurLineTarget, lookat:=xlWhole)
    LineTarget = SearchLineTarget.Row
    Set SearchColumnTarget = Workbooks(FileTarget).Worksheets(SheetsTarget).Range("A1:Z500").Find(ValeurColumnTarget, lookat:=xlWhole)
    Set SearchLineSource = Workbooks(FileSource).Worksheets(SheetsSource).Range("A1:Z500").Find(ValeurLineSource, lookat:=xlWhole)
    LineSource = SearchLineSource.Row
    Set SearchColumnSource = Workbooks(FileSource).Worksheets(SheetsSource).Range("A1:Z150").Find(ValeurColumnSource, lookat:=xlWhole)
    ColumnSource = SearchColumnSource.Column
    Application.DisplayAlerts = False                      'Je desactive les boites de dialogues pour ne pas perturber l'utilisateur
    Set Source = Workbooks(FileSource).Sheets(SheetsSource).Cells(LineSource, ColumnSource) 'J'attribue la valeur de la cellule qui correspond au coordonnées voulu dans ma variable source
    MaCellule = Source                                      'J'attribue la valeur de la variable source à ma variable Macellule
    If MaCellule = "" Then
    MaCellule = "x"
    End If
    Workbooks(FileTarget).Sheets(SheetsTarget).Cells(LineTarget, ColumnTarget) = MaCellule
    Application.DisplayAlerts = True                        'Je reactive les boites de dialogues
    End Function
    Voici ici comment est appelé ma fonction données dans ma procédure MAIN:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call donnee("NB de 4RM TH", Mois, ETBS, "NB de 4RM TH", "tdb_dmre_fu.xls", "Tableau de bord véhicules", "Courbe d'évolution Véh " + Year + " ETBS.xls", ETBS)
    à savoir que Mois contient "Janvier", ETBS contient "ABBEVILLE" et Year contient "2016".

    Le problème est que j'obtient une érreur d'éxecution 1004 défini par l'objet ou l'application dès le premier find. Ce qui est étonnant c'est que je me sers d'une fonction que j'avais déja utilisé dans une précédente macro et qui fonctionnait correctement.

    PS: J'ai entendu dire sur un forum que la méthode find ne perméttait que de chercher un mot unique, dans mon cas la valeur recherché à pour valeur "NB de 4RM TH", cela dit j'ai éssayer en remplaçant ce groupe nominal par un mot unique et j'ai obtenu le même méssage d'érreur, pouvez vous m'éclaircir sur le fait que la méthode find ne marche qu'avec un mot unique, et si tel est le cas existe t'il des astuces permettant de contourner ce problème

    Cordialement

    Alexis

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Il faudrait que tu déclares mieux tes variables. La méthode find renvoie un objet Range, il faut donc que tu déclares les variables associés aux Fin comme des objets Range :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim SearchLineSource As Range
    Tu peux aussi directement utiliser ta variable LineSource sans passer par une variable intermediaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim LineSource As Long
    LineSource = Workbooks(FileSource).Worksheets(SheetsSource).Range("A1:Z500").Find(ValeurLineSource, lookat:=xlWhole).Row
    Déclares tes numéros de ligne comme des Long, plutôt que Integer.
    Pourquoi utilises-tu une Function et pas un Sub?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 25
    Par défaut
    Rebonjour,

    Merci pour ta réponse, j'utilise une fonction car je suis amené à utiliser cette fonction un certain nombre de fois dans ma procédure principale.

    Voici mon code en tenant compte de ta réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Function donnee(ValeurLineTarget, ValeurColumnTarget, ValeurLineSource, ValeurColumnSource, FileSource, SheetsSource, FileTarget, SheetsTarget)  'La Fonction donnee me permet de copier la cellule d'un fichier dans un autre fichier
    Dim Source As Range                                   'Je declare ma cellule Sources
    Dim LineSource As Long
    Dim ColumnSource As Long
    Dim LineTarget As Long
    Dim ColumnTarget As Long
    Workbooks(FileTarget).Activate
    LineTarget = Workbooks(FileSource).Worksheets(SheetsSource).Range("A1:Z500").Find(ValeurLineTarget, lookat:=xlWhole).Row
    ColumnTarget = Workbooks(FileSource).Worksheets(SheetsSource).Range("A1:Z500").Find(ValeurColumnTarget, lookat:=xlWhole).Row
    LineSource = Workbooks(FileSource).Worksheets(SheetsSource).Range("A1:Z500").Find(ValeurLineSource, lookat:=xlWhole).Row
    ColumnSource = Workbooks(FileSource).Worksheets(SheetsSource).Range("A1:Z500").Find(ValeurColumnSource, lookat:=xlWhole).Row
    Application.DisplayAlerts = False                      'Je desactive les boites de dialogues pour ne pas perturber l'utilisateur
    Set Source = Workbooks(FileSource).Sheets(SheetsSource).Cells(LineSource, ColumnSource) 'J'attribue la valeur de la cellule qui correspond au coordonnées voulu dans ma variable source
    MaCellule = Source                                      'J'attribue la valeur de la variable source à ma variable Macellule
    If MaCellule = "" Then
    MaCellule = "x"
    End If
    Workbooks(FileTarget).Sheets(SheetsTarget).Cells(LineTarget, ColumnTarget) = MaCellule
    Application.DisplayAlerts = True                        'Je reactive les boites de dialogues
    End Function
    J'obtiens désormais une érreur 91 "Variable d'objet ou bloc d'instruction with non défini"

    Cordialement

    Alexis

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    le Range de ton premier Find est constitué de deux cellules, puisque le séparateur est le point virgule au lieu du ":"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set SearchLineTarget = Workbooks(FileTarget).Worksheets(SheetsTarget).Range("A1;Z500").Find(ValeurLineTarget, lookat:=xlWhole)
    il est aussi conseillé, avant d'utiliser le résultat d'un find, de toujours tester si la variable objet issue du find ne vaut pas Nothing

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    il est aussi conseillé, avant d'utiliser le résultat d'un find, de toujours tester si la variable objet issue du find ne vaut pas Nothing

    Si une variable objet vaut Nothing, l'utiliser abouti irrémédiablement à l'erreur 91 dont tu fais mention


    Que tu ai une fonction ou une procédure, rien n'empêche de l'utiliser en masse dans une procédure parente

    La seule différence, c'est qu'une fonction est censée renvoyer un resultat à la procédure appelante, contrairement à une procédure dont le rôle et de faire un traitement/réaliser des actions
    Ici, tu ne renvoies aucun résultat, il sera beaucoup plus opportun que ta Function devienne une Sub pour rester dans les bonnes pratiques

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 25
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    le Range de ton premier Find est constitué de deux cellules, puisque le séparateur est le point virgule au lieu du ":"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set SearchLineTarget = Workbooks(FileTarget).Worksheets(SheetsTarget).Range("A1;Z500").Find(ValeurLineTarget, lookat:=xlWhole)
    il est aussi conseillé, avant d'utiliser le résultat d'un find, de toujours tester si la variable objet issue du find ne vaut pas Nothing
    Merci c'était effectivement l'érreur merci et désolé pour cette faute d'innatention que je n'arrivais pas à trouver.

    Cordialement Alexis

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je suis aussi perplexe qu'inquiet lorsque que je lis des choses telles que celle-ci :
    j'utilise une fonction car je suis amené à utiliser cette fonction un certain nombre de fois dans ma procédure principale
    Inquiet parce qu'elles montrent que les fondements mêmes n'ont pas été compris.

    Il est peut-être temps de s'intéresser à ce qu'est la vocation d'une fonction (de RETOURNER quelque-chose).

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 25
    Par défaut
    Merci pour cette précision, toutefois le ton condescendant n'est vraiment pas nécéssaire, cela fait plusieurs fois que vous me répondez avec un ton aussi méprisable sur plusieurs demandes différentes, j'avais déja expliqué qu'à la base je suis technicien réseau et que par nécéssité j'ai trouvé un emploi de "développeur" de macro VBA Excel, de plus vôtre message n'apporte rien de plus au sujet puisque on venez de m'expliquer le concept.

    J'en deviens même à me demander si vôtre signature "Tout développeur est pour moi un ami" n'est au final là que pour faire beau, vous employez le même ton lorsque l'un de vos "Amis" vous demande de l'aide sur un concept qu'il n'as pas saisi? (C'est une réthorique je n'attend pas de réponse)

    Cordialement Alexis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] erreur 1004 sur une boucle
    Par bastien dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/05/2013, 09h07
  2. Erreur 1004 sur une feuille protégée
    Par lilou315 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/09/2011, 14h48
  3. [XL-2003] erreur 1004 sur une instruction (VB)
    Par Adweuz dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/04/2011, 12h06
  4. erreur 1004 sur une méthode select
    Par lollo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2008, 19h21
  5. Erreur 1004 sur une boucle simple
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/07/2007, 09h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo