Incompréhension exportation fichier excel

Bonjour,

J'ai crée un programme en vba qui exporte les données d'un tableau (Userform) vers un fichier excel.

Le problème est que le programme va s'éffectuer normalement la première fois. La 2nd (sans modif) il y aurra un bug 1004.

 

CODE:

Sub Export_excel()

Dim i, j        As Integer

Dim i0, j0      As Integer

'Evaluons le nombre de points

j0 = 0

i0 = 3

k = 0

While j0 < 1

    If Tableau.Classeur1.Cells(i0, 1) <> "None" Then

        k = k + 1

        i0 = i0 + 1

    Else

        j0 = 1

    End If

Wend

If k = 0 Then

    MsgBox "Le tableau est vide"

    Exit Sub

End If

Nbpoints = k + 1

Call AddNewWorkbook

'On créer l'objet Excel

'Set xlApp = CreateObject("Excel.Application")

'Set xlBook = xlApp.Worksbooks

'Ouvrir le fichier

'Workbooks.Open fileName:=lien_fichierxlsx

Workbooks(Nom_Fichier & ".xlsx").Activate Erreur '1004'

'Worksheets("Table Bouteille").Select

For i = 1 To Nbpoints + 1

    Range("A" & i) = Tableau.Classeur1.Cells(i, 1)

    Range("B" & i) = Tableau.Classeur1.Cells(i, 2)

    Range("C" & i) = Tableau.Classeur1.Cells(i, 3)

    Range("D" & i) = Tableau.Classeur1.Cells(i, 4)

    Range("E" & i) = Tableau.Classeur1.Cells(i, 5)

    Range("F" & i) = Tableau.Classeur1.Cells(i, 6)

Next

ActiveWorkbook.Save

ActiveWorkbook.Close

MsgBox "Exportation réussie!", vbMsgBoxSetForeground + vbExclamation, "TRAPRO DESIGN"

End Sub

 

Je vous joint la macro si vous voulez voir comment je l'ai fait.

Il faut créer un dossier: D:\Import-Export\ (ou changer le lien dans Userform_Initialize)

 

Merci beaucoup de vos réponses,

JB


copie_de_prog.swp

Voici un exemle qui marche la première fois et pas la seconde...


capture2.png

Bonjour,

 

L'erreur intervient à quelle ligne ? Lorsque tu fais debuggage, normalement, la ligne est surlignée.

C'est à la ligne:

Workbooks(Nom_Fichier & ".xlsx").Activate

 

si je la mets en commentaire c'syt la ligne:

Range("A" & i) = Tableau.Classeur1.Cells(i, 1)

 

En fait j'ai l'impression que le prb vient avec le language excel

 

En fait ta ligne :

 

'Workbooks.Open fileName:=lien_fichierxlsx

 

 

Est en commentaire et à la fin de ton code tu fermes ton classeur !

 

ActiveWorkbook.Close

 

Donc au début de ta macro, il faut tester s'il est déjà ouvert et le rouvrir si besoin !

Un bout de code qui permet de tester si un classeur est ouvert et l'ouvrir si besoin :

 

Dim wbName As String = "Test.xlsx"

Dim PathName As String = "c:\Test\" & wbName

Dim wbBook As Excel.Workbook

 

 

For Each wbBook In xlApp.Workbooks

 

If wbBook.Name = wbName Then

wbBook.Activate()

Exit Sub

End If

Next

Dim xl_wbBook As Excel.Workbook = xlApp.Workbooks.Open(PathName) 

En fait je créais un ficher excel dans AddNewWorkbook.

j'ai fait des test en l'ouvrant dans l'autre macro.

 

Sub excel_ouvert()

Dim wbName As String

Dim PathName As String

Dim wbBook As excel.Workbook

 

'wbName = "Test.xlsx"

'PathName = "D:\Import-Export\" & wbName

 

For Each wbBook In xlApp.Workbooks

    If wbBook.Name = Nom_Fichier & ".xlsx" Then

        wbBook.Activate

        Exit Sub

    End If

Next

Dim xl_wbBook As excel.Workbook

 

xl_wbBook = xlApp.Workbooks.Open(lien_fichierxlsx)

 

End Sub

 

j'ai une Erreur à la création du fichier:

xl_wbBook = xlApp.Workbooks.Open(lien_fichierxlsx)

 

Pour bien comprendre j'ai mis la macro dans le premier commentaire.


capture4.png

Il y a l'option 

 

UserForm1.Classeur1.Export

 

peut-on l'enregistrer dans un dossier?

Au temps pour moi, le bout de code n'est pas fonctionnel !

 

Il faut plutôt le créer :

Dim newWorkbook As Excel.Workbook = Me.Application.Workbooks.Add()

 

Puis l'enregistrer sous le nom choisi :

 

Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=lien_fichierxlsx, FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Application.DisplayAlerts = True

 

Je n'ai pas compris ton dernier message.

J'ai mis

 

Dim newWorkbook As excel.Workbook

newWorkbook = Me.Application.Workbooks.Add()

 

et il me dit "Mauvaise utilisation de Me"

le programme est dans un module.

 

Dois-je mettre?

UserForm1.Classeur1.Application.Workbooks.Add()

 

 

La fonction Export du Classeur 1 exporte toutes les données du classeur dans un fichier excel.

Cependant il est en Lecture seul et dans un format spécial: .XML

 

Nom du fichier créé:

OWCSheet91101.XML

 

Je veux savoir s'il est possible par macro de l'enregistrer en .xlsx au nom désiré.

ça réglerait mon prb

Désolé

Workbooks.Add

devrait suffire avant le save as au lieu de 

Dim newWorkbook As excel.Workbook

newWorkbook = Me.Application.Workbooks.Add()

Voici mon Code final:

Call AddNewWorkbook

'Test si Workbook ouvert

For Each xlBook In xlApp.Workbooks

    If xlBook.Name = Nom_Fichier & ".xlsx" Then

        xlBook.Activate

        Exit Sub

    End If

Next

'On ajoute un classeur

Set xlBook = xlApp.Workbooks.Add

'On donne un nom au classeur

xlBook.SaveAs (lien_fichierxlsx)

 

'renomme l'onglet

Sheets("Feuil1").Name = "Table Bouteille"

Sheets("Feuil2").Name = "Données"

 

'Export le fichier

For i = 1 To Nbpoints + 1

    Range("A" & i) = Tableau.Classeur1.Cells(i, 1)

    Range("B" & i) = Tableau.Classeur1.Cells(i, 2)

    Range("C" & i) = Tableau.Classeur1.Cells(i, 3)

    Range("D" & i) = Tableau.Classeur1.Cells(i, 4)

    Range("E" & i) = Tableau.Classeur1.Cells(i, 5)

    'Range("F" & i) = Tableau.Classeur1.Cells(i, 6)

Next

 

ActiveWorkbook.Save

ActiveWorkbook.Close

 

Merci Lucas de ton temps!!

 

JB

1 « J'aime »