Workbooks(NomVariable).Activate - Erreur d'exécution 9 - L'indice n'appartient pas a la selection

pmfontaine

XLDnaute Occasionnel
Bonjour, avec le code ci-dessous trouvé sur le net, je crée un fichier en Vba a partir d'un autre fichier dans lequel je veux coller des valeurs.
Mais j'ai un message "Erreur d'exécution 9 - L'indice n'appartient pas a la sélection"
J'ai beau chercher sur le Net, je ne trouve pas où est mon erreur.
Voir fichier joint et Voila le code :
VB:
Sub AddNewWorkbook()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim annéedujour As Integer
Dim moisdujour As Integer
Dim jourdujour As Integer
Dim datedujour As String
Dim NomFichier As String
    'On créer l'objet Excel
    Set xlApp = CreateObject("Excel.Application")
    'On défini le nombre d'onglets (ici 1)
    xlApp.SheetsInNewWorkbook = 1
    'On ajoute un classeur
    Set xlBook = xlApp.Workbooks.Add
    'On donne un nom au classeur
    annéedujour = Year(Date)
    moisdujour = Month(Date)
    jourdujour = Day(Date)
    datedujour = jourdujour & "-" & moisdujour & "-" & annéedujour
    'MsgBox datedujour
    NomFichier = "Importation " & datedujour & " a " & Format(Now, "hh-mm-ss") & ".xlsx"
    xlBook.SaveAs ThisWorkbook.Path & "\" & NomFichier
        'On rend le classeur visible
    xlApp.Visible = True
    'On créer l'objet onglet dans le nouveau classeur créé
    Set xlSheet = xlBook.Worksheets(1)
    'On affecte un nom a l'onglet
    xlSheet.Name = "FeuilleDestination"
    'xlApp.Quit
    Sheets("FeuilleSource").Select
    Cells.Select
    Application.CutCopyMode = False
    Selection.Copy
    MsgBox NomFichier ' pour vérifier si le nom est correcte
    Workbooks(NomFichier).Activate
    ActiveSheet.Paste
End Sub
Merci d'avance pour votre aide
Patrick
 

Pièces jointes

  • Classeur2.xlsm
    18.6 KB · Affichages: 56

Dranreb

XLDnaute Barbatruc
Bonsoir.
N'avez vous pas un peu l'impression d'avoir ajouté un élément à la collection Workbooks d'une application Excel différente de celle sous laquelle votre macro tourne, et que par conséquent la propre collection de celle ci ne le contient pas ?…
D'ailleurs c'est vraiment à se demander pourquoi c'est fait comme ça !
 

pmfontaine

XLDnaute Occasionnel
Bonjour,
Nouveau sujet, nouveau problème, mais toujours Dranreb pour nous aider. MERCI.
Comme je ne suis pas informaticien et que je n’excelle pas dans Excel, je suis incapable de taper un code en partant de rien. Donc je me contente de chercher un bout de code sur le Net qui correspond a mon souhait et j'essaye de l'adapter.
Est-ce que vous pourriez en langage de néophyte du VBA m'expliquer mon erreur ?
Merci
Patrick
 

Dranreb

XLDnaute Barbatruc
Bonjour
Ben je crois que l'erreur c'est de faire comme ça justement.
Il vaut mieux apprendre à écrire une procédure à partir de rien.
Quitte à commencer par la faire toute petite. Comme ça :
VB:
Sub NouveauClasseur()
Dim Wbk As Workbook
Set Wbk = Workbooks.Add
End Sub
Utiliser des variables objet comme ici cette Wbk est intéressant parce qu'il suffit de taper un point derrière son nom dans une instruction pour avoir l'affichage d'une liste proposant les propriétés et méthodes utilisables.
Puis vous l’étoffez peu à peu :
VB:
Sub NouveauClasseur()
Dim Wbk As Workbook, Wst As Worksheet, Rng As Range
Set Wbk = Workbooks.Add
Set Wst = Wbk.Sheets(1)
MsgBox "La 1ère feuille du nouveau classeur s'appelle pour l'instant """ & Wst.Name & """.", vbInformation, "Essais"
Wbk.SaveAs ThisWorkbook.Path & "\Essai.xls"
Wbk.Close
End Sub
Et, très important: pour avoir un brouillon de la macro engendré automatiquement: menu Développeur, groupe Code, commande Enregistrer une macro, puis effectuer les manœuvres souhaitées pendant que ça enregistre. S'il est très mal écrit question optimisation, il permet de ne pas oublier de paramètre au méthodes appropriées au résultat voulu.
 

pmfontaine

XLDnaute Occasionnel
Merci,
J'ai réussi avec ce code :
VB:
Sub NouveauClasseur2()
Dim Montab As Variant
Montab = Range("A1:G65535").Value
Dim Wbk As Workbook, Wst As Worksheet, Rng As Range
Set Wbk = Workbooks.Add
Set Wst = Wbk.Sheets(1)
MsgBox "La 1ère feuille du nouveau classeur s'appelle pour l'instant """ & Wst.Name & """.", vbInformation, "Essais"
Wbk.SaveAs ThisWorkbook.Path & "\Essai.xls"
Wbk.Activate
Range("A1:G65535").Value = Montab
Wbk.Save
Wbk.Close
End Sub
 

pmfontaine

XLDnaute Occasionnel
Bonjour,
Encore un petit soucis.
La création de ce fichier est destiné a importer des données dans un logiciel qui pour le moment ne supporte que la version Excel 97 avec 65536 lignes. Mais avec ce code j'obtiens un fichier xls mais avec 1048576 lignes. Si je l'enregistre manuellement en Excel 97-2003 ça marche.
D’où ma question : Peut-on faire une sauvegarde en VBA en Excel 97-2003 avec 65536 ligne avec Excel 2007 ?
Merci
Patrick
 

Dranreb

XLDnaute Barbatruc
Bonjour.
J'y avais pensé et c'est ce qui m'avait pousser à vous recommander :
pour avoir un brouillon de la macro engendré automatiquement: menu Développeur, groupe Code, commande Enregistrer une macro, puis effectuer les manœuvres souhaitées pendant que ça enregistre. S'il est très mal écrit question optimisation, il permet de ne pas oublier de paramètre au méthodes appropriées au résultat voulu
Ne pas oublier d'arrêter l'enregistrement. Ça m'arrive régulièrement, et je me retrouve avec un immense module … à supprimer de toute façon.
 

pmfontaine

XLDnaute Occasionnel
Bonjour
Merci Dranred de m'avoir mis sur la piste.
Ça marche avec ce code :
VB:
 Wbk.SaveAs ThisWorkbook.Path & "\" & NomFichier _
        , FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
 

Discussions similaires

Statistiques des forums

Discussions
312 178
Messages
2 085 980
Membres
103 079
dernier inscrit
sle