Problème référencement Excel VB6

agadiroufla

XLDnaute Junior
Bonjour,
Je suis entrain de faire un petit EXE qui ouvre excel et le ferme plusieurs fois.
Le premier lancement se déroule bien mais excel rest en tache de fonds (Gestionnaire de taches), mais que je relance le traitement le programme rencontre une erreur "la méthode Range ne fait pas parti de la selection ....".
Pour remédier à ce probleme j'ai essayé de réecrire le programme en décochant le référencement d'excel, du coup la synthaxe est plus difficile et je bloque dans le code qui supprime les ligne vides dans la page excel :
Merci de jeter un oeil au code ci-dessous :
'supprime les lignes vides

Dim Jk As Long
Dim Plage2 As Object
Set Plage2 = wbExcel.ActiveSheet.Range("D5", wbExcel.ActiveSheet.Range("D65536").End(xlUp)) <----- l'erreur du code
For Jk = wbExcel.ActiveSheet.Plage2.Cells.Count To 1 Step -1
If Plage2.Cells(Jk).Value = "" Then
Plage2.Cells(Jk).EntireRow.Delete
End If
Next

'mettre sous totaux
Selection.Subtotal GroupBy:=5, Function:=xlSum, TotalList:=Array(3, 5), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
Cells.Select
Cells.EntireColumn.AutoFit
 

youky(BJ)

XLDnaute Barbatruc
Re : Problème référencement Excel VB6

Bonjour,
Un petit pouce au problème.
Pas sur de moi je n'ai plus VB6, d'ailleurs je n'ai bossé que sur le 4 & le 5
Bruno
Code:
Dim Jk As Long
 Dim Plage2 As Object
 Set Plage2 = wbExcel.ActiveSheet.Range("D5:D" & wbExcel.ActiveSheet.Range("D65536").End(xlUp).row)'modifié 
For Jk = wbExcel.ActiveSheet.Plage2.Cells.Count To 1 Step -1
 If Plage2.Cells(JK,4).Value = "" Then 'modifié
 Plage2.Cells(Jk,4).EntireRow.Delete'modifié
 End If
 Next
 

tototiti2008

XLDnaute Barbatruc
Re : Problème référencement Excel VB6

Bonjour agadiroufla, Bonjour youky :),

Si les références à Excel sont désactivées, ton code ne connait plus les valeurs des constantes Excel, en l'occurrence xlUp et xlSum
Il faut les remplacer par leurs valeurs

xlUp = -4162, xlSum = -4157
D'autre part si un Excel subsiste en mémoire, c'est que tu n'as pas dû bien en sortir
ton code se finit-il par :
wbExcel.Quit 'Quitter l'application
Set wbExcel = Nothing 'Libère la variable objet Excel
?
 

agadiroufla

XLDnaute Junior
Re : Problème référencement Excel VB6

Bonsoir youky, tototiti2008 et le Forum,
Malheuresement je bloque toujours.
J ai bien mis :

wbExcel.Save
wbExcel.Close True
appExcel.Quit

Set wsExcel = Nothing
Set wbExcel = Nothing
Set appExcel = Nothing
Mais je n'arrive pas a quitter excel !!!
Voila le morceau de code qui me bloque

'supprime les lignes vides

Dim Jk As Long
Dim Plage2 As Object
Set Plage2 = wbExcel.ActiveSheet.range("D5:D" & wbExcel.ActiveSheet.range("D65536").End(xlUp).Row) 'modifié
For Jk = wbExcel.ActiveSheet.Plage2.Cells.Count To 1 Step -1
If Plage2.Cells(Jk, 4).Value = "" Then 'modifié
Plage2.Cells(Jk, 4).EntireRow.Delete 'modifié
End If
Next

'mettre sous totaux
Selection.Subtotal GroupBy:=5, Function:=xlSum, TotalList:=Array(3, 5), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
Cells.Select
Cells.EntireColumn.AutoFit
'''''''''''''''''''''''''''''''''''
Dim Y As Long
Dim myrange2 As String
'boucler sur listbox
With Form1.Label10
Y = 2
myrange2 = wbExcel.ActiveSheet.range("D" & Y).Value
While myrange2 <> ""
myrange2 = wbExcel.ActiveSheet.range("D" & Y).Value
If Right(wbExcel.ActiveSheet.range("D" & Y).Value, 3) = Label10.Caption Then
Form1.Text1 = wbExcel.ActiveSheet.range("D" & Y).Offset(0, -1).Value
End If
Y = Y + 1
Wend
End With
End With

wbExcel.Save
wbExcel.Close True
appExcel.Quit
DoEvents

Set wsExcel = Nothing
Set wbExcel = Nothing
Set appExcel = Nothing

Application.DisplayAlerts = True

Merci infiniment de votre aide
 

Dranreb

XLDnaute Barbatruc
Re : Problème référencement Excel VB6

Bonsoir.
En tout cas cette instruction est très bizarre pour moi :
For Jk = wbExcel.ActiveSheet.Plage2.Cells.Count To 1 Step -1
Sous VBA Excel un objet Worksheet n'a pas de propriété Plage2
De plus c'est aussi le nom que vous avez choisi pour tout autre chose qui n'a absolument rien à voir: une variable Plage2 As Object. En passant n'existe t-il pas dans votre système de type Excel.Range ?
Enfin bref, compte tenu du Set que vous faites préalablement sur votre variable Plage2, ça me paraîtrait plus cohérent de faire :
VB:
For Jk = Plage2.Cells.Count To 1 Step -1
Cordialement
 

agadiroufla

XLDnaute Junior
Re : Problème référencement Excel VB6

Bonsoir,
La syntaxe ci-dessous est celle de VB6 avec excel non référencé
For Jk = wbExcel.ActiveSheet.Plage2.Cells.Count To 1 Step -1
J ai suivi tototiti2008 et j ai remplacé le Xlup et Xlsum mais je bloque toujours sur le code :
For Jk = wbExcel.ActiveSheet.Plage2.Cells.Count To 1 Step -1
Autrement, est ce que vous auriez un code qui permet de faire a même chose, c à d , supprimer des lignes vides sans référencement d'excel pour que excel ne reste plus en mémoie après Set appExcel = Nothing.
Merci encore
 

tototiti2008

XLDnaute Barbatruc
Re : Problème référencement Excel VB6

Bonjour agadiroufla, Bonjour youky, Bonjour Bernard, :)

Corrige déjà comme Bernard te l'a proposé, on verra ensuite pourquoi Excel ne se ferme pas quand le reste de la macro fera ce que tu souhaites
 

agadiroufla

XLDnaute Junior
Re : Problème référencement Excel VB6

Bonsoir,
J'ai essayé la syntaxe de Bernard mas sans succès. Finalement je vais opter pour le référencement d'excel. Le programme se déroule bien mais uniquement le premier lancement, si on lance le programme une deuxième fois ça provoque une erreur "la méthode sheets de l'objet global a échoué", le problème c'est que après le premier essai Excel.exe reste en mémoire étant donné que je ne quitte pas ma Form (il s'agit de plusieurs traitements à lancer successivement en utilisant le même fichier excel).
Vous auriez une idée ?
Merci
Voici le code complet qui pose problème :
Code:
Private Sub Command6_Click() 'rapatrier soldes newedge
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Workbook 'Classeur Excel
Dim wsExcel As Worksheet 'Feuille Excel

'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = True
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("C:\Users\H\Documents\Appel marge Tawfik\Etat newedge.xls")
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.ActiveSheet
'''''''''''''''''
'''''''''''''''''
With ActiveSheet
Sheets("Récap positions Newedge").Select

Dim i As Long
Dim J As Long
Dim montableau(5000, 4) As Variant
'Dim Rg As wbExcel.Range
Dim Plage As String
Dim myrange As String
Dim myrange1 As String
Plage = "D1:D5000"

'Désactive la mise à jour de l'affichage
'Application.ScreenUpdating = False
'Désactive la mise à jour des recalculs
'appExcel.Application.Calculation = xlCalculationManual
With Form1.Text14
'Set Rg = Range(plage).Find(Text14)
i = 2
J = 0
     myrange = Sheets("Récap positions Newedge").Range("D" & i).Value
     myrange1 = Sheets("Récap positions Newedge").Range("G" & i).Value
While myrange <> ""
     myrange = Sheets("Récap positions Newedge").Range("D" & i).Value
     myrange1 = Sheets("Récap positions Newedge").Range("G" & i).Value
     
      If myrange = Text14 And myrange1 = "F" Then
        montableau(J, 0) = Sheets("Récap positions Newedge").Range("D" & i).Value 'code newedge
        montableau(J, 1) = Sheets("Récap positions Newedge").Range("L" & i).Value 'qté futures
        montableau(J, 2) = Sheets("Récap positions Newedge").Range("N" & i).Value 'VB
        montableau(J, 3) = Sheets("Récap positions Newedge").Range("T" & i).Value 'Cours j
        montableau(J, 4) = Sheets("Récap positions Newedge").Range("U" & i).Value 'Devise
End If
i = i + 1
J = J + 1
Wend
End With
''''''''''''''''''''''
'vérif existance feuille
With Text14
'Dim sh As Worksheet
 ' For Each sh In Worksheets
'If sh.Name = Text14 Then
'  sh.Select
'End If
'Next
  ' wbExcel.sh.Add
   'ActiveSheet.Name = Range("A2").Value
  ' End With
   
   Dim AN As Byte
For AN = 1 To Sheets.Count
If Sheets(AN).Name = Text14 Then
Sheets(AN).Select
Exit For
End If
Next AN

If ActiveSheet.Name = Text14 Then
ActiveSheet.Select
Else
Sheets.Add.Name = Text14
End If
End With
''''''''''''''''''''''
 'active la feuil1 pour y mettre Montableau
   Set wsExcel = ActiveSheet
Derligne = J - 1
For i = 0 To Derligne 'UBound(Montableau, 2)
     For J = 0 To UBound(montableau, 2) 'UBound(Montableau, 1) il fallait mettre 2 au lieu de 1 car
        ActiveSheet.Cells(i + 3, J + 1) = montableau(i, J)
    Next J
Next i
 
    ActiveSheet.Range("A1") = "Code newedge"
    ActiveSheet.Range("B1") = "Qté Futures"
    ActiveSheet.Range("C1") = "VB"
    ActiveSheet.Range("D1") = "Cours j"
    ActiveSheet.Range("E1") = "Devise"
    
 Erase montableau
     
'   On Error Resume Next
     'supprime les lignes vides
     
 ActiveSheet.Range("A2:A" & Range("A65226").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

    
    'mettre sous totaux
        Selection.Subtotal GroupBy:=5, Function:=xlSum, TotalList:=Array(3, 5), _
        Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    Cells.Select
    Cells.EntireColumn.AutoFit
  '''''''''''''''''''''''''''''''''''
  Dim Y As Long
  Dim myrange2 As String
'boucler sur listbox
 With Form1.Label10
    Y = 2
    myrange2 = Range("D" & Y).Value
    While myrange2 <> ""
    myrange2 = Range("D" & Y).Value
    If Right(Range("D" & Y).Value, 3) = Label10.Caption Then
Form1.Text1 = Range("D" & Y).Offset(0, -1).Value
End If
Y = Y + 1
Wend
End With
End With

wbExcel.Save
wbExcel.Close
appExcel.Quit

Set wsExcel = Nothing
Set wbExcel = Nothing
Set appExcel = Nothing

End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Problème référencement Excel VB6

Ouais. Mais dès le début je ne comprend pas bien comment même la 1ère fois VB6 peut connaître des choses comme ActiveSheet derrière With sans le faire précéder d'un objet qui possède cette propriété, appExcel ou wbExcel.
Une question me taraude depuis le début: pourquoi avez vous choisi de faire un programme .exe en VB6 plutôt qu'une macro en Excel ? Ce serait surement plus facile !
P.S. Et je me demande à quoi servent vos With: je ne voit nulle part d'utilisation de la variable du bloc With (rien, juste un point)
À +
 
Dernière édition:

agadiroufla

XLDnaute Junior
Re : Problème référencement Excel VB6

Bonsoir Bernard,
J avoue c'est plus facile coté VBA mais je voulais faire un truc bien indépendant d'excel et qui va aller chercher des données dans plusieurs fichiers.
Bref, je suis entrain de cerner le problème :
Au bout du deuxième lancement (sachant qu'après le premier lancement je supprime manuellement excel du task manager) l'erreur se produit au moment de créer les sous totaux :
Code:
        Selection.Subtotal GroupBy:=5, Function:=xlSum, TotalList:=Array(3, 5), _
        Replace:=True, PageBreaks:=False, SummaryBelowData:=True
Est ce que ça te dit quelques chose ? sachant que j'ai coché les références excel
 

Dranreb

XLDnaute Barbatruc
Re : Problème référencement Excel VB6

Non. C'est quoi comme erreur ? Mets des espions qu'est-ce que tu veux que je te dise. À commencer par un espion sur Selection

Hé !
mais je voulais faire un truc bien indépendant d'excel
...mais qui utilise clairement l'application ! Ça sent le dégoût !
 
Dernière édition:

Statistiques des forums

Discussions
311 735
Messages
2 082 024
Membres
101 873
dernier inscrit
excellllll