Fermer un fichier Excel mode de Compatibilité

Résolu/Fermé
Phil.ch - 21 août 2016 à 11:15
 Phil.ch - 24 août 2016 à 23:22
bonjour à vous toutes et tous,

Via une macro ,j'ouvre un fichier Excel. Celui-ci fait par une autre personne à été mis en mode de Compatibilité ( Je l'appel B pour la suite ...).

Depuis ce fichier B, je copie des données d'un tableau que je reporte dans le tableau de mon document.
Cette partie là ne me pose pas trop de problème.
Par contre, dès que j'essaye de retourner dans le fichier B, j'ai le message suivant : Erreur d'exécution : 9 , L'indice n'appartient pas à la sélection.

Qui peut me dire ce qui se passe. Car j'ai remarqué que tout ce qu'identifie le fichier B une fois que celui-ci est ouvert, me donne le message d'erreur.

Merci de m'expliquer ce qui se passe et comment faire pour pouvoir fermer ce fichier automatiquement.

D'avance merci à vous
A voir également:

2 réponses

Bonjour Phil.ch,

L'erreur d'exécution #9 : « L'indice n'appartient pas à la sélection »
se produit lorsque l'indice d'un tableau est en dehors des limites
de ce tableau ; exemple : Dim Tbl(5) avec Option Base 1 =>
erreur #9 si tu utilises Tbl(0) ou Tbl(10).

Cette erreur #9 peut aussi se produire si tu essayes de référencer
un élément qui ne fait pas partie d'une collection. Exemple :
Worksheets(6) quand il n'y a que 5 feuilles de calcul ;
Worksheets("Juin") quand la feuille "Juin" n'existe pas ;
Workbooks("ABC") quand le classeur "ABC" n'est pas
chargé en mémoire vive (RAM).

Et n'oublies pas que pour ouvrir un fichier, il faut préciser son
chemin (sauf si dans répertoire en cours) et son extension :
*.xlsx ou *.xlsm

Mais difficile d'en dire plus sans voir ton code !

Si ton problème est réglé, merci d'aller en haut de page
pour cliquer sur « Marquer comme résolu ».

Cordialement.  😊
 
1
Bonjour Albkan,

Un grand merci pour ton explication. Elle est claire et j'ai bien compris. Par contre, ce que je ne comprends pas c'est pourquoi elle vient.


J'ouvre le fichier sans problème, je copie et reporte sans soucis avec ce qui suit :

Dim CHE As String, NomFi As String, ONGL As String, CEFI As String, NomComp As String
CHE = Sheets("Lien").Range("B3").Value  ' Chemin d'accès
NomFi = Sheets("Lien").Range("C3").Value    ' Nom du fichier avec extension
ONGL = Sheets("Lien").Range("D3").Value     ' Nom de la page à travailler
CEFI = Sheets("Lien").Range("C2").Value     ' Nom du fichier depuis lequel j'ouvre
NomComp = CHE & NomFi           'Mise en place pour ouvrir le fichier
Workbooks.Open Filename:=NomComp
X = 2   'Valeur du tableau RH
'Boucle pour déterminer la zone à copier
While Range("B" & X) <> ""
X = X + 1
Wend
X = X - 1
Range("B2", "G" & X).Copy
Windows(CEFI).Activate
Sheets("LP").Range("B2").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False

Et c'est ci-dessous que celà coince : 

    'Retour au fichier RH pour le fermer
    Windows(NomFi).Activate
    ActiveWorkbook.Saved = True
    ActiveWorkbook.Close


'..... etc etc la suit


PS : tu l'as constaté, je bricole .... C'est surement pas fait dans les règles ni dans la simplicité, mais si tu peux tout de même m'aider.... Je t'en, ou vous, en serai reconnaissant.

Avec mes remerciements
0
Utilisateur anonyme > Phil.ch
Modifié par albkan le 21/08/2016 à 18:42
 
Rebonjour Phil.ch,

Tu peux me tutoyer ; mon explication vient car dans ton message initial,
tu as écris que tu avais cette erreur :

« Erreur d'exécution : 9 , L'indice n'appartient pas à la sélection. »

--------------------------------------------------------

Voici d'abord une simplification de la première partie de ton code VBA :


Option Explicit

Sub Essai()

  Dim CHE As String, NomFi As String, ONGL As String, CEFI As String, NomComp As String

  ' N'oublie pas les points « . » qui sont  devant les « [ » !
  With Worksheets("Lien")
    CHE = .[B3]      ' Chemin d'accès
    NomFi = .[C3]    ' Nom du fichier avec extension
    ONGL = .[D3]     ' Nom de la page à travailler
    CEFI = .[C2]     ' Nom du fichier depuis lequel j'ouvre
  End With

  NomComp = CHE & NomFi   ' Mise en place pour ouvrir le fichier
  Workbooks.Open NomComp

  ' Ou directement, sans utiliser NomComp (auquel cas tu peux
  ' supprimer sa déclaration en ligne Dim) :
  ' Workbooks.Open CHE & NomFi

  ' X : selon la colonne B, dernière ligne du tableau ; attention :
  ' valable seulement si pas de données sous ton tableau
  X = Range("B" & Rows.Count).End(xlUp).Row

  ' S'il y a des données sous ton tableau, mets ce que tu avais
  ' mis au départ :
  ' X = 2   'Valeur du tableau RH
  ' Boucle pour déterminer la zone à copier
  ' While Range("B" & X) <> ""
  '   X = X + 1
  '  Wend
  '  X = X - 1

  ' Attention : ton instruction de départ n'est pas bonne !
  ' Pour une plage, tu dois utiliser le caractère séparateur
  ' deux-points « : »
  Range("B2:G" & X).Copy

  Windows(CEFI).Activate
  [LP!B2].PasteSpecial Paste:=xlPasteAll
  Application.CutCopyMode = False

End Sub


Ça sera beaucoup plus court si tu enlèves tous les commentaires ajoutés
à ton intention et qui ne serviront plus après que tu les aies lus. Vérifie
d'abord que ce code VBA marche bien et te donne le résultat attendu,
puis dis-moi ce que tu en penses.  😉

--------------------------------------------------------

Pour ce que tu as mis à la fin de ton message, je suppose que c'est
ta 1ère ligne qui coince : Windows(NomFi).Activate

Je pense que c'est parce que NomFi comporte l'extension de fichier,
et que ça marchera sans cette extension ; donc à toi de l'enlever,
mais seulement pour cette instruction.

Je pourrais facilement le vérifier avec ton vrai fichier, mais sans,
je n'en suis pas sûr (et je n'ai pas envie de créer un fichier de
simulation juste pour ça) ; donc je te laisse essayer...

À te lire.  😊
 
0
Phil.ch > Utilisateur anonyme
24 août 2016 à 23:19
Salut,

Un grand GRAND MERCI. Tes explications sont nickel et de qualitées. Tu as été plus rapide que moi, je m'en excuse. J'ai fait autre chose. J'ai suivi tes conseils, modifié comme tu me l'as suggéré. Ca marche. Mon problème est résolu.

Je te suis reconnaissant de ton aide, du temps que tu as pris pour me lire, me répondre et me conseiller.

Albkan, meilleures salutations.
Amicalement.
:-)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
22 août 2016 à 09:07
Bonjour,

Lorsque l'on fait, comme cela, des "allers-retours" entre plusieurs classeurs, il vaut toujours mieux les référencer dans des variables Objets. Comme ceci :

Dim wbkSource As Workbook, wbkDest As Workbook

Set wbkDest = ThisWorkbook
Set wbkSource = Workbooks.Open(NomComp)

'Ainsi après tu peux utiliser ces variables :
With wbkSource

End With
With wbkDest

End With


0
Bonjour / Bonsoir,

Merci à vous pijaku, pour merci pour votre explication. Je fais facilement ce genre de "aller-retour", et votre remarque me sera donc d'une grande utilitée.

Merci à vous
0