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-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 20
    Points : 9
    Points
    9
    Par défaut Erreur d'exécution '9' : l'indice n'appartient pas à la sélection
    Bonjour à tous,

    Comme cité dans le titre du topic j'ai une erreur de type 9 qui apparaît lors de l'exécution de mon code.
    Celui ci a pour but d'aller chercher une chaîne de caractère dans le fichier excel s'appellant maListe(Compteur) - cette liste recense tous les noms des ficheirs qui me seront nécessaires - , dans la feuille Dépenses prévisionnelles et dans la cellule c6.
    La valeur doit alors être attribuée à la feuille Armines à la cellule (I,6+k).

    J'ai envisagées plusieurs solutions(vues sur internet) dont l'ADO mais cette solution ne marche que si j'ai une base.dbf ce qui n'est pas le cas...

    Pour info le classeur que je cherche à atteindre se trouve dans le même répertoire que le fichier courant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'Affectation du nom du porteur
     
    With ThisWorkbook.Sheets("ARMINES").Cells(6 + k, 9)
       temp = Workbooks(maListe(Compteur)).Sheets("Dépenses prévisionnelles").Range("C6").Value               
       If temp = "" Then
          ThisWorkbook.Sheets("ARMINES").Cells(6 + k, 9).Value = "non renseigné"
          Else: ThisWorkbook.Sheets("ARMINES").Cells(6 + k, 9).Value = temp
       End If
    End With
    Merci d'avance!

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,
    Déjà, si tu veux raccorcir le code, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    With ThisWorkbook.Sheets("ARMINES").Cells(6 + K, 9)
       Temp = Workbooks(MaListe(Compteur)).Sheets("Dépenses prévisionnelles").Range("C6").Value
       If Temp = "" Then: .Value = "non renseigné": Else .Value = Temp
    End With
    Si l'erreur est sur la ligne "ThisWorkbook.Sheets("ARMINES").Cells(6 + K, 9)", vérifie que la feuille existe bien ou que son nom est bien Orthographié.
    Si l'erreur est sur "Temp = Workbooks(MaListe(Compteur)).Sheets("Dépenses prévisionnelles").Range("C6").Value" c'est que le classeur n'est probablement pas ouvert et dans ce cas, utilise la méthode Open de l'objet Workbooks "Workbooks.Open" en utilisant une variable objet Workbook, c'est souvant plus simple pour la suite du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Dim Cls As Workbook
        Set Cls = Workbooks.Open(MaListe(Compteur))
        Temp = Cls.Sheets("Dépenses prévisionnelles").Range("C6").Value
        'suite du code...
    Hervé.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Bonsoir Hervé,

    Merci pour ton aide!

    Alors maintenant nouvelle erreur, sur la ligne d'ouverture du classeur.
    (myWorkbook est une variable globale.)

    Erreur 1004 erreur définie par l'application ou par l'objet

    Ne faut-il pas préciser le chemin?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Affectation du nom du porteur
                Set Me.myWorkbook = Workbooks.Open(maListe(Compteur))
     
                With ThisWorkbook.Sheets("ARMINES").Cells(6 + k, 9)
                    temp = Me.myWorkbook.Sheets("Dépenses prévisionnelles").Range("C6").Value
                    If temp = "" Then: .Value = "non renseigné": Else .Value = temp
                End With

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    Le classeur n'existe probablement pas (ou mal Orthographié) ou le tableau est vide.
    Teste avec un "MsgBox maListe(Compteur)" juste avant "Set Me.myWorkbook = Workbooks.Open(maListe(Compteur))" afin de voir ce qui est dans le tableau.
    Hervé.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Non le classeur n'est pas vide... il m'affiche correctement le nom du 1er fichier :

    Fiche INFO unNumero - unNom.xls

    J'ai cherché sur Internet hier d'où pouvait bien provenir l'erreur mais je n'ai pas rencontré de cas similaire au mien..

    Merci.

  6. #6
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Dans ton tableau tu dois avoir le chemin complet du classeur du style "D:\MonDossier\MonClasseur.xls" et non juste son nom car le compilateur ne sais pas où aller chercher ce classeur. Si tous tes classeurs sont dans le même dossier que celui qui a la proc tu peux faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public myWorkbook As Workbook
     
    Sub Ouvrir()
     
        Set myWorkbook = Workbooks.Open(ThisWorkbook.Path & "\" & maListe(Compteur))
     
    End Sub
    Hervé.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    OK merci!!! ça fonctionne. Donc là je suis sûre que mon chemin etc est bon. Le truc c'est que je voulais accéder aux fichiers sans qu'ils s'ouvrent pour l'utilisateur... et là mes 31 fichiers se sont ouverts j'ai vu sur internet plusieurs solutions mais utilisant un fichier dbf et je n'en ai pas
    aurais-tu une idée? sinon tant pis je vais repartir à la recherche d'une solution adaptable à mon projet

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par Akhane Voir le message
    J'ai envisagées plusieurs solutions(vues sur internet) dont l'ADO mais cette solution ne marche que si j'ai une base.dbf ce qui n'est pas le cas...
    Citation Envoyé par Akhane Voir le message
    j'ai vu sur internet plusieurs solutions mais utilisant un fichier dbf et je n'en ai pas
    Où as-tu bien pu voir qu'ADO ne marche qu'avec des bases DBF?

    ADO permet de se connecter à tous types de bases de données, y compris des fichiers texte ou des classeurs Excel.

    Pour Excel, un petit tuto à lire: http://silkyroad.developpez.com/VBA/ClasseursFermes/
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Avec ADO tu peux récupérer des valeurs dans des classeurs fermés mais il faudrait savoir quoi et où ? Bref, il faudrait en savoir un peu plus.

    Hervé.

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

Discussions similaires

  1. [XL-2010] Erreur d'exécution '9': L'indice n'appartient pas à la sélection
    Par Fred_rt dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/02/2015, 10h29
  2. 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
  3. 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
  4. Réponses: 13
    Dernier message: 27/04/2012, 10h57
  5. 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

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