VB et excel

Signaler
Messages postés
48
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
13 septembre 2007
-
Messages postés
48
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
13 septembre 2007
-
Bonjour les p'tits loups voilà mon problème,
je fais appel à un tableau excel dans mon programme en VB6, voilà mon bout de code pour appeler le tableau :

Dim xlApp As New Excel.Application

xlApp.Visible = True
xlApp.Workbooks.Add
xlApp.DisplayAlerts = False

Puis ensuite j'utilise d'autres fonctions pour mette des données dans ce tableau, pour cela aucun problème.
Mon problème est le suivant, le tableau se lance 1 fois puis les fois suivante on ne le voit pas, juste la barre windows du haut...????
Pour bien faire je dois fermer le programme et recommencer
Ne faut-il pas fermer l'instruction excel mais comment ?!

Merci d'avance

Xynder [}:)] 59

11 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,


Peu etre que tes objets sont mal déchargés.


As tu pensé a faire


XlApp.Quit
Set XlApp = Nothing a la fin

@+, Julien
Pensez:
Messages postés
48
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
13 septembre 2007

Oui mai le fait de faire cela ne va-t'il pas fermer ma feuille excel ?

Et donc mon tableau !!!!

Je vais essayer ....

Xynder [}:)] 59
Messages postés
48
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
13 septembre 2007

Ben non j'ai encore unn message qui apparaît :

"Run-time error '1004'
Method 'sheets' of object '_Global' failed "

Fait hiech

Xynder [}:)] 59
Messages postés
21
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
11 avril 2007

Bonjour


tu fais on error resume next dans la procedure qui appel l'excelet il vas ouvrir le fichier
Messages postés
48
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
13 septembre 2007

Oui mais si je fais cela il ne lancera pas le reste de mon programme et cela revient à la même chose....

Xynder [}:)] 59
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

ifaza : le on error resume next est la facilité mais les syntaxes à problèmes ne sont pas exécutés.

Xynder : ton code n'est pas suffisant, il y a une multitudes de choses qui font que ton code peut 'planter'.
Met nous les Set xlApp = ..., ce genre de chose.

@++

   Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
Messages postés
48
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
13 septembre 2007

Très bien voilà le code, attention il est peut être un peu primaire mais je l'ai fait en 10min:

Dim xlApp As New Excel.Application

Private Sub Command1_Click()
'je commence par fermer les feuilles ouvertes occasionnelles
    xlApp.Quit
    Set xlApp = Nothing
    xlApp.Visible = True
    xlApp.Workbooks.Add
    xlApp.DisplayAlerts = False
    On Error Resume Next
    Call init
End Sub

Private Sub init()
Dim an As Integer
Dim mois As String
Dim N°mois As Integer
    an = Format(Me.jour, "yyyy")
    mois = Format(Me.jour, "mmmm")
    N°mois = Format(Me.jour, "mm")
    Call création_feuille(N°mois, mois, an)
    ActiveWindow.TabRatio = 0.939
End Sub

'création de la feuille
Public Sub création_feuille(num_mois, mois, an)
Dim cool As String
    cool = "01/" & num_mois & "/" & an
    Sheets.Add   ' << le message d'erreur intervient ici
    ActiveSheet.Name = mois
    Range("A1").Select
    ActiveCell.FormulaR1C1 = mois & " " & an
    Selection.Font.Bold = True
    Call ajout_jour
    ActiveWindow.TabRatio = 0.939
    Range("A2") = Format(cool, "dddd")
    Call ajout
End Sub

Public Sub ajout_jour()
x = "C2:AG2"
If Range("A1") = "Février" Then
    x = "C2:AE2"
ElseIf Range("A1") "Avril" Or Range("A1") "Juin" Or Range("A1") = "Septembre" Or Range("A1") = "Novembre" Then
    x = "C2:AF2"
End If
End If
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "2"
    Range("C2:D2").Select
    Selection.AutoFill Destination:=Range(x), Type:=xlFillDefault
    Range("C2:AG2").Select
    Selection.ColumnWidth = 2
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
    With ActiveWindow
        .DisplayGridlines = False
        .DisplayHeadings = False
    End With
End Sub

Public Sub ajout()
x = "C1:AG1"
If Range("A1") = "Février" Then
    x = "C1:AE1"
ElseIf Range("A1") "Avril" Or Range("A1") "Juin" Or Range("A1") = "Septembre" Or Range("A1") = "Novembre" Then
    x = "C1:AF1"
End If
End If
If Range("A2") = "dimanche" Then
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "D"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "L"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "J"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "V"
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "S"
    Range("C1:I1").Select
    Selection.AutoFill Destination:=Range(x), Type:=xlFillDefault
End If
If Range("A2") = "lundi" Then
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "L"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "J"
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "V"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "S"
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "D"
    Range("C1:I1").Select
    Selection.AutoFill Destination:=Range(x), Type:=xlFillDefault
End If
If Range("A2") = "mardi" Then
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "J"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "V"
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "S"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "D"
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "L"
    Range("C1:I1").Select
    Selection.AutoFill Destination:=Range(x), Type:=xlFillDefault
End If
If Range("A2") = "mercredi" Then
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "J"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "V"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "S"
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "D"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "L"
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("C1:I1").Select
    Selection.AutoFill Destination:=Range(x), Type:=xlFillDefault
End If
If Range("A2") = "jeudi" Then
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "J"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "V"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "S"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "D"
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "L"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("C1:I1").Select
    Selection.AutoFill Destination:=Range(x), Type:=xlFillDefault
End If
If Range("A2") = "vendredi" Then
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "V"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "S"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "D"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "L"
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "J"
    Range("C1:I1").Select
    Selection.AutoFill Destination:=Range(x), Type:=xlFillDefault
End If
If Range("A2") = "samedi" Then
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "S"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "D"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "L"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "M"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "J"
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "V"
    Range("C1:I1").Select
    Selection.AutoFill Destination:=Range(x), Type:=xlFillDefault
End If
Range("C1:AG1").Select
    Selection.ColumnWidth = 2
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
    With ActiveWindow
        .DisplayGridlines = False
        .DisplayHeadings = False
    End With
    Range("A2") = ""
End Sub
'Fin création de feuille

Voilà il s'agit en fait du haut d'un calendrier automatique, c'est cette partie qui mere une fois sur deux....

Xynder [}:)] 59
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Dim xlApp As New Excel.Application


Private Sub Command1_Click()

'je commence par fermer les feuilles ouvertes occasionnelles

    xlApp.Quit

    Set xlApp = Nothing  '  l'objet xlApp n'existe plus

    xlApp.Visible = True

    xlApp.Workbooks.Add

    xlApp.DisplayAlerts = False

    On Error Resume Next

    Call init

End Sub


Je te conseille d'utiliser plusieurs objets

xlApp as Excel.Application

xlBook as Excel.WorkBook

xlSheet as Excel.Worksheet


Plutôt que xlApp.WorkBooks.Add

fais plutôt

    Set xlApp = New Excel.Application


    Set xlBook = xlApp.Workbooks.Open(App.Path & "\toto.xls")

(ou peut-être     Set xlBook = xlApp.Workbooks.Add

             
           xlBook.Name =
App.Path & "\toto.xls"    )

    Set xlSheet = xlBook.Sheets("Feuil1")


Comme ça, tu peux travailler avec une feuille ou un classeur sans fermer l'instance d'Excel

MPi
Messages postés
48
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
13 septembre 2007

Cela ne semble pas fonctionner non plus....

Xynder [}:)] 59
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
>>     Sheets.Add   ' << le message d'erreur intervient ici


Je ne pense pas que VB puisse comprendre ce bout de code.

Il faudrait que tu mettes quelque chose comme

xlApp.Worksheets.Add
à condition que xlApp ait été initialisé et qu'il soit toujours actif (visible ou non)

MPi
Messages postés
48
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
13 septembre 2007

xlApp.Worksheets.Add m'affiche la page mais pas les élèments que je lui envoi,
Sheets.Add fonctionne très bien mais une fois seulement, si je ferme le programme et que je le redemarre, cela fonctionne !!!!!

Xynder [}:)] 59