Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Ouvrir un fichier Excel en VB

Bonjour à tous,

Je débute dans l'utilisation de QlikView (Version 11.20).

Je cherche à envoyer un tableau de données ("CH418") vers un fichier Excel existant, à l'aide d'un bouton cliquable. Pour cela, j'ai trouvé sur internet le programme VB suivant :

  1. Sub Test 
  2.    ExcelAppend "h:\test.xlsx", "CH418" 
  3. End Sub 

  1. Sub ExcelAppend(strExcelAppenFile, strExelAppendObjectID) 
  2.    ' Create an instance of Excel 
  3.    SET objExcelApp = CREATEOBJECT("Excel.Application") 
  4.    ' Open workbook 
  5.    WITH objExcelApp 
  6.       .DefaultSaveFormat = xlWorkbookNormal 
  7.       .DisplayAlerts = FALSE 
  8.       .Workbooks.Open strExcelAppenFile 
  9.       .DisplayFullScreen = FALSE 
  10.       .Visible = FALSE 
  11.    END WITH 
  12.    ' Set worksheet 
  13.    SET objExcelSheet = objExcelApp.Worksheets(1) 
  14.    ' Set Excel used range 
  15.    SET objExcelRange = objExcelSheet.Range("A65535").End(-4162) 
  16.    ' Last used row in column A 
  17.    intExcelLastRow = objExcelRange.Row 
  18.    ' Set object to append from 
  19.    SET objObjectFrom = ActiveDocument.GetSheetObject(strExelAppendObjectID) 
  20.    ' Loop all rows of the object except first header row 
  21.    FOR intObjectRow = 1 To objObjectFrom.GetRowCount - 1 
  22.       ' Loop all columns of the object 
  23.       FOR intObjectColumn = 0 To objObjectFrom.GetColumnCount - 1 
  24.          ' Get object data 
  25.          SET objCell = objObjectFrom.GetCell(intObjectRow, intObjectColumn) 
  26.          ' Add that data to Excel cell 
  27.          objExcelSheet.Cells(intObjectRow + intExcelLastRow, intObjectColumn + 1) = objCell.Text 
  28.       NEXT 
  29.    NEXT 
  30.    ' Save and quit 
  31.    objExcelSheet.SaveAs strExcelAppenFile 
  32.    objExcelApp.Application.Quit 
  33.    SET objExcelSheet = NOTHING       
  34.    SET objExcelApp = NOTHING 
  35. END SUB    

J'utilise ce code de la façon suivante :

  1. Création du bouton
  2. Propriétés > Actions > Exécuter une macro > Nom de la macro : Test
  3. Editer la macro : je colle le code précédent, et clique sur Appliquer, et derme la fenêtre "Editer le module"
  4. Je clique sur le bouton pour lancer la macro
  5. En bas à gauche de l'écran, "Macro exécutée..." apparaît
  6. La fenêtre "Editer le module" réapparaît

A cette étape, j'ouvre le fichier test.xlsx pour contrôler que la procédure a bien fonctionné, mais le fichier n'est pas rempli.

Au cours de cette procédure, Qlik ne m'alerte pas d'un quelconque problème. Pourtant, je n'obtiens pas le résultat souhaité.

Pourriez-vous svp m'indiquer ce qui ne fonctionne pas dans ma démarche ?

Merci pour votre aide !

Labels (1)
1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

Mais si ton fichier existe, le problème vient du H: , si c'est lecteur reseau comme par exemple myServeur (H:) utilise \\myServeur\test.xlsx et ca devrait marcher

View solution in original post

15 Replies
sfatoux72
Partner - Specialist
Partner - Specialist

Bonjour,

Si la fenêtre  "Editer le module" réapparaît, c'est qu'il y a un problème avec ton script.

As-tu activer les accès systèmes ?

Community_1176924.png

Not applicable
Author

Merci Sébastien pour ton aide !

Oui, les accès système sont bien paramétrés. Comment savoir d'où vient mon erreur ?

Merci !

sfatoux72
Partner - Specialist
Partner - Specialist

Le fichier h:\test.xlsx doit exister avant de lancer l'exécution de la macro, sinon sa plante.

Est-ce le cas?

Not applicable
Author

Bonjour Sébastien,

Oui c'est bien la cas 🙂

Je ne sais pas où le programme bug.

Merci beaucoup !

sfatoux72
Partner - Specialist
Partner - Specialist

Chez moi, ça fonctionne bien.

La macro faisant appel à une librairie Excel, il faut bien sur que Excel soit installé sur le poste ou est exécuté la macro (ce n'est généralement pas le cas sur les serveur).

Est-ce le cas?

Not applicable
Author

Bonjour,

Merci d'avoir testé.

Excel est bien installé sur mon ordinateur...

On ne peut pas déboguer le code ?

Merci !

masselin
Contributor II
Contributor II

Bonjour,

une variante qui fonctionne chez moi :

une seule function avec la possibilité de renseigner dans une boite de dialogue :

- l'adresse du fichier excel de destination

- la reference de l'objet

sub ExcelAppend
'choose file
strExcelAppenFile = InputBox ("Fichier Excel de destination avec chemin" , "Reglages" , "y:\test.xlsx")
strExelAppendObjectID = InputBox("Objet à transférer" , "Reglages" , "CH03")
' Create an instance of Excel 
SET objExcelApp = CREATEOBJECT("Excel.Application") 

' Open workbook 
WITH objExcelApp 
.DefaultSaveFormat = xlWorkbookNormal 
.DisplayAlerts = FALSE 
.Workbooks.Open strExcelAppenFile 
.DisplayFullScreen = FALSE 
.Visible = FALSE 
END WITH 

' Set worksheet 
SET objExcelSheet = objExcelApp.Worksheets(1) 

' Set Excel used range 
SET objExcelRange = objExcelSheet.Range("A65535").End(-4162) 
' Last used row in column A 
intExcelLastRow = objExcelRange.Row 
' Set object to append from 
SET objObjectFrom = ActiveDocument.GetSheetObject(strExelAppendObjectID) 
' Loop all rows of the object except first header row 
FOR intObjectRow = 1 To objObjectFrom.GetRowCount - 1 
' Loop all columns of the object 
FOR intObjectColumn = 0 To objObjectFrom.GetColumnCount - 1 
' Get object data 
SET objCell = objObjectFrom.GetCell(intObjectRow, intObjectColumn) 
' Add that data to Excel cell 
objExcelSheet.Cells(intObjectRow + intExcelLastRow, intObjectColumn + 1) = objCell.Text 
NEXT 
NEXT 

' Save and quit 
objExcelSheet.SaveAs strExcelAppenFile 
objExcelApp.Application.Quit 
SET objExcelSheet = NOTHING 
SET objExcelApp = NOTHING 
END sub


sfatoux72
Partner - Specialist
Partner - Specialist

Pour débuguer, met des message box à intervalle régulier pour identifier le code exécuté de celui qui ne l'ai pas.

...

msgbox "A"

...

msgbox "B"

...

msgbox "C"

....

Not applicable
Author

Sébastien :

  1. Sub ExcelAppend(strExcelAppenFile, strExelAppendObjectID)
  2.    ' Create an instance of Excel
  3.    SET objExcelApp = CREATEOBJECT("Excel.Application")
  4.    ' Open workbook
  5.   msgbox "A"
  6.    WITH objExcelApp
  7.       .DefaultSaveFormat = xlWorkbookNormal
  8.       .DisplayAlerts = FALSE
  9.       .Workbooks.Open strExcelAppenFile
  10.       .DisplayFullScreen = FALSE
  11.       .Visible = FALSE
  12.    END WITH
  13.       msgbox "B"

=> A s'affiche, mais B ne s'affiche pas ! Le problème est donc entre les deux

Merci Jean-Luc, je testerai votre code !