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 d'exécution '9': L'indice n'appartient pas à la sélection [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 108
    Points : 78
    Points
    78
    Par défaut Erreur d'exécution '9': L'indice n'appartient pas à la sélection
    Bonjour,

    Je cherche à faire quelque chose de simple apparemment mais cela ne fonctionne pas et comme je ne suis pas un pro du VBA, je demande votre aide.
    Je souhaite faire une rechercheV en VBA entre 2 classeurs.
    Dans mon premier classeur j'entre le nom d'un salarié et je souhaite qu'il me renvoie la date d'embauche qui se trouve dans un second classeur. Que les 2 classeurs soient ouverts ne change rien. J'ajoute que je souhaite qu'il me retourne le résultat dans la cellule D15.
    Donc voici mon code:
    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
    Sub Cherche()
     
    Dim retFind As String
    Dim f As Variant
    'Dim source As Workbooks
     
    'Set source = Workbooks.Open("C:\Users\Administrateur\Desktop\Documents VBA\personnel.xlsx")
    Range("D15").Select
     
          f = Application.VLookup(Sheets("C:\Users\Administrateur\Desktop\Documents VBA\[Avances.xlsx]Fichier").Range("A4"), Sheets("C:\Users\Administrateur\Desktop\Documents VBA\[Personnel.xlsx]Salaires").Range("A2:J1500"), 6, True)
         If IsError(f) Then
            retFind = "Element non trouvé"
          Else
            retFind = f
         End If
    End Sub
    Mais j'ai l'erreur " Erreur d'exécution '9': L'indice n'appartient pas à la sélection ", que faire pour résoudre le problème ?

    Merci d'avance pour votre aide.

    Fred

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour Fred_rt,

    Je suis certain que ceci : "C:\Users\Administrateur\Desktop\Documents VBA\[Avances.xlsx]Fichier" n'ouvre pas ton classeur et ne pointe pas sur la feuille souhaitée afin de cibler la cellule A4.

    Cordialement,
    Kimy

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 108
    Points : 78
    Points
    78
    Par défaut erreur 9
    Bonjour et merci Kimy,

    Le classeur est ouvert car c'est à partir de lui qu'est lancé la requête. Après la syntaxe n'est sans doute pas correcte, mais je ne vois pas comment l'écrire autrement. Range("Fichier!A4").Value ? j'essaie mais alors comment écrire le chemin et la plage du fichier ciblé "Salaires" ?

    Merci de ton aide

    Cordialement,

    Fred

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour Fred_rt,

    Comment s'appelle ton classeur ? Ta feuille cible ?
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Fred_rt()
    Dim oRng As Range
    Dim result As String
     
    With Workbooks("source").Worksheets("Feuil1-1")
        Set oRng = .Range("A4")
     
        With Workbooks("cible").Worksheets("Feuil1-2")
            result = Application.VLookup(oRng, .Range("A2:J1500"), 6, True)
            MsgBox result
        End With
    End With
     
    End Sub
    Alors je n'ai pas testé, mais ça ne doit pas être loin de ça. Sinon, tu peux utiliser la fonction "Find" avec la méthode "Offset".
    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
    Sub Fred_rt2()
    Dim oRng As Range
    Dim result As Range
     
    With Workbooks("source").Worksheets("Feuil1-1")
        Set oRng = .Range("A4")
     
        With Workbooks("cible").Worksheets("Feuil1-2")
            Set result = .Range("A2:A1500").Find(oRng, LookIn:=xlValues, LookAt:=xlWhole)
            If Not result Is Nothing Then
                MsgBox result.Offset(0, 6)
            End If
        End With
    End With
     
    End Sub
    Idem, pas testé, mais je te laisse revenir vers moi si tu rencontres des difficultés !

    Cordialement,
    Kimy

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 108
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    Merci de tes réponses, je vais tester. Je t'explique ce que je cherche à faire.
    J'ai un formulaire "Avances.xlsx" dans lequel j'entre le nom du salarié (onglet Fichier, cell A4), je crée un bouton qui me permet de recherche dans un autre classeur "Personnel.xlsx" des informations sur ce salarié, et je souhaite qu'une fois trouvées, les récupérer dans des cellules précises de mon classeur "Avances.xlsx".

    J'espère avoir été clair.

    En attendant je vais tester les solutions que tu me proposes.

    Kimy,

    Dans les 2 cas, j'ai toujours le même retour Erreur 9 sur la ligne :With Workbooks("C:\Users\Administrateur\Desktop\Documents VBA\Avances.xlsx").Worksheets("Fichier")

    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
    Sub rechercheV()
     
    Dim oRng As Range
    Dim result As Range
     
    With Workbooks("C:\Users\Administrateur\Desktop\Documents VBA\Avances.xlsx").Worksheets("Fichier")
        Set oRng = .Range("A4")
     
        With Workbooks("C:\Users\Administrateur\Desktop\Documents VBA\Personnel.xlsx").Worksheets("Salaires")
            Set result = .Range("A2:A1500").Find(oRng, LookIn:=xlValues, LookAt:=xlWhole)
            If Not result Is Nothing Then
                MsgBox result.Offset(0, 6)
            End If
        End With
    End With
     
    End Sub
    Faut-il faire une connexion entre les 2 classeurs avec un truc du genre:

    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
    Dim retFind As String
    Dim f As Variant
    Dim Cn As ADODB.Connection
    Dim Classe As String
    Dim NomFeuille As String
    Dim Rst As ADODB.Recordset
     
     
        'Définit le classeur fermé servant de base de données
        Classe = "C:\Users\Administrateur\Desktop\Documents VBA\Personnel.xlsx"
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "Salaires"
     
        Set Cn = New ADODB.Connection
     
        '--- Connexion ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Classe & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
    Voilà, je vais tester mais n'y-a-t-il pas des limites à ces fonctions entre 2 classeurs ?

    Cordialement,

    Fred

  6. #6
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Fred_rt,

    T'es Workbooks sont-ils ouverts à l'exécution de la macro ?
    Si oui, pas besoin de chemin, juste leur nom suffit.

    Cordialement,
    Kimy

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 108
    Points : 78
    Points
    78
    Par défaut
    Mon fichier Avances(formulaire) est ouvert. J'aurai préféré que celui du personnel ne le soit pas. Quoiqu'il en soit, je vais tester avec les 2 classeurs ouverts.

    Je me permets de joindre les fichiers en question. Sans abuser de ton temps, ce sera plus simple.

    Merci d'avance.

    Cordialement,

    Fred
    Fichiers attachés Fichiers attachés

  8. #8
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Ceci fonctionne :
    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
    Sub rechercheV()
     
    Dim oRng As Range
    Dim result As Range
     
    With Workbooks("Avances.xlsm").Worksheets("Fichier")
        Set oRng = .Range("A4")
     
        With Workbooks("Personnel - Copie.xlsx").Worksheets("Salaires")
            Set result = .Range("A2:A1500").Find(oRng, LookIn:=xlValues, LookAt:=xlWhole)
            If Not result Is Nothing Then
                MsgBox result.Offset(0, 6)
            End If
        End With
    End With
     
    End Sub
    Donc je ne comprends pas trop...
    (Attention, tu as un espace à la fin du nom en question dans le classeur "Personnel - Copie".)

  9. #9
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 108
    Points : 78
    Points
    78
    Par défaut
    Salut,

    En effet cela fonctionne, le fichier sur lequel je faisais des tests contenait un lien qui apparemment faussait la recherche. Et en effet, il faut que je supprime tous les espaces dans le fichier cible.
    Je te remercie de ton aide efficace.
    Il ne me reste plus qu'à récupérer le résultat dans une cellule choisit et pas dans une boite de dialogue.

    Bonjour Kimy,

    C'est encore moi, bien que j'apprenne beaucoup de chose je ne suis pas encore un développeur VBA
    Le code que tu m'as fourni hier fonctionne très bien. Ce que je souhaiterai pour que ce soit parfait, c'est de retourner le résultat dans une cellule spécifique et non pas dans une msgbox. Est-ce possible ?

    Cordialement,

    Fred

  10. #10
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour Fred_rt,

    Bien sur !!! La MsgBox n'est que pour le "débug".
    Place result.Offset(0, 6) où tu le souhaites.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Ma cible")
        .Range("A1") = result.Offset(0, 6)
    End With
    ... à la place de la MsgBox, tu auras compris !

    N'hésite pas à revenir vers moi !
    On peut, dans ton cas de figure, à peu près tout imaginer pour placer la valeur !

    Cordialement,
    Kimy

  11. #11
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 108
    Points : 78
    Points
    78
    Par défaut suite erreur 9
    Salut,

    T'es un chef

    Merci

    Fred

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

Discussions similaires

  1. Erreur d'exécution '9': L'indice n'appartient pas à la sélection
    Par Tho69 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/08/2013, 09h12
  2. Erreur d'Exécution 9' : L'indice n'appartient pas à la selection
    Par Sara86 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 19/04/2013, 17h28
  3. Réponses: 13
    Dernier message: 27/04/2012, 10h57
  4. erreur d'exécution 9, l'indice n'appartient pas à la sélection
    Par Quentin15 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/06/2011, 17h34
  5. [XL-2007] Erreur d'exécution '9' : l'indice n'appartient pas à la sélection
    Par Akhane dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/02/2011, 21h04

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