Qlik Community

Groupe des Utilisateurs Francophones

Announcements
Submit your remarkable customer story for the Global Transformation Awards at QlikWorld Denver 2022. SUBMIT A STORY
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
Partner

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
Partner

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
Partner

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
Partner

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
Partner

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 !