Vb6 comment se passer d'un classeur excel

raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014 - 26 févr. 2011 à 15:24
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 5 mars 2011 à 14:53
Bonjour,
comme à force de chercher partout je pense que je veux faire dans la complexité alors que ça doit être très simple pour que je ne le pense.
alors pour faire simple
j'ai fais une appli en vb6 qui ouvre quand je Click un classeur excel en arriéré plan , sur ce classeur feuille1 j'importe des données via une requête de données externe ça me fait un beau tableau , sur la feuille2 je fais un tri qui a la fin sur une colonne me donne un 1 ou 0.
mon appli en fonction de cette colonne fait apparaître ou pas des lignes de ce tableau dans différentes listbox en fonction aussi de ce qu'il y dans des cellules de ce classeur excel. Puis je ferme ce classeur puis loop.
En gros ça me fait une appli de supervision. Mais ça n'a pas d'importance.
Ce que je veux faire c'est me passer de ce classeur excel pour des raisons pratiques pour pouvoir faire la même chose juste avec mon appli.exe et de pas avoir mon appli.exe et ce classeur.xls a envoyé aux utilisateurs.
je m'embrouille avec ces histoire d'sql ADO , etc
A savoir aussi que j'utilise excel en early binding pour être sure d'être compatible si j'ai bien compris.
Comme beaucoup d'autodidacte je manque de trop de vocabulaire technique pour trouver ça par moi même via les forums.
Please help me !!

17 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
26 févr. 2011 à 16:14
Bonjour,

En clair, tu fais quoi avec ce classeur, du tri seulement ?
Si oui, quel let la source de données, une base gérant le SQL, si oui, tu peux utiliser la cause ORDER BY

Mon site
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
26 févr. 2011 à 16:55
c'est une requête données externes sur le classeur sous forme d'une URL envoyé au portail intranet du boulot
cette requête dans excel sur la feuille1 me créé un tableau (a partir de la cellule A1) qui représente les interventions prévues dans le mois avec des colonnes : numéro de l'intervention , date et heure de début , date et heure de fin , description de l'intervention , responsable de l'intervention ,... sur la feuille2 je reprend tout ce tableau ou en gros j'ai ajouté 1 colonne qui me répond vrai et compris entre la date de début et la date de fin , une autre qui me fais pareil avec <MAINTENANT> pour l'heure, une troisième qui me répond vrai si les 2 précédentes sont VRAI ou FAUX si au moins un des 2 est FAUX, une dernière qui transforme se VRAI ou faux en 1 ou 0. j'ai aussi une cellule qui me fait la somme de 1 dans cette dernière colonne(cela correspond donc au nombre d'interventions en cours).
dans mon code VB j'ouvre ce fichier je le mets a jour avec un refreshall(ce qui importe avec la requête de données externe enregistrer dans ce classeur) puis je fais un autre tri via des listboxs en fonction d'une autre cellule de chaque intervention
par exemple si il y a "AIX" dans cette cellule mettre dans ce listbox. une fois fait le vb referme ce fichier sans le sauvegarder puis après une pause recommence(ouvrir fichier--> mettre a jour--> afficher dans listbox... etc
j'espère être clair...:)
merci déjà de ta réponse
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
26 févr. 2011 à 17:02
je précise que tout ça fonctionne correctement mais que mon but et de ne pas utiliser excel pour faire la même chose
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
26 févr. 2011 à 17:11
    
    Public Var1 As String, Var2 As String, Var3 As String, Var4 As String, Var5 As String, Var6 As String, Var7 As String, Var8 As String, link As String
    Dim appExcel As Object
    Dim wbExcel As Object
    Dim wsExcel As Object
    Dim Rang As Object
    Dim numero As Integer
    Public celltrouv As Variant
    Dim heure As String
    Dim PauseTime, Start
    Dim Looping As Boolean
    
    'déclaration pour mettre dans la barre des taches
    Option Explicit
Private Const SW_HIDE = 0
Private Const SW_SHOW = 5
Private Declare Function ShowWindow Lib "user32" _
         (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_APPWINDOW = &H40000
Private Declare Function GetWindowLong Lib "user32" _
         Alias "GetWindowLongA" _
         (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
         Alias "SetWindowLongA" _
         (ByVal hWnd As Long, ByVal nIndex As Long, _
         ByVal dwNewLong As Long) As Long
    
Public Sub Command1_Click()
    Looping = True
    Do While Looping
    heure = Now
    List1.Clear
    List2.Clear
    List3.Clear
    List4.Clear
    List5.Clear
    List6.Clear
    List7.Clear
    List8.Clear
    Label2.Caption = ""
    Label3.Caption = ""
    Set appExcel = CreateObject("Excel.Application")
    Set wbExcel = appExcel.Workbooks.open("d:\TEMP\Classeur01.xls", ReadOnly:=True)
    Set wsExcel = wbExcel.ActiveSheet
    
    wbExcel.RefreshAll
    
    Var4 = wbExcel.Sheets(2).Range("M1").Value
    Label2.Caption = Var4 & " Changements en cours"
    Label3.Caption = heure
    If Var4 = "" Then
    Label2.Caption = "Pas de changement en cours"
    End If
            Set Rang = wbExcel.Sheets(2).Range("L2:L1200")
            numero = 1
            For Each celltrouv In Rang
                If celltrouv = numero Then
                        Var1 = celltrouv.Offset(0, -2).Value & " -- " & "Responsable : " & celltrouv.Offset(0, -6).Value & " -- " & "Description : " & celltrouv.Offset(0, -7).Value & vbCrLf
                        Var6 = celltrouv.Offset(0, 2).Value
                        If Var6 Like "*MVS*" Then
                        Me.List1.AddItem Var1
                        End If
                        If Var6 Like "*AIX*" Then
                        Me.List2.AddItem Var1
                        End If
                        If Var6 Like "*LINUX*" Then
                        Me.List3.AddItem Var1
                        End If
                        If Var6 Like "*RESEAU*" Then
                        Me.List4.AddItem Var1
                        End If
                        If Var6 Like "*WINDOWS*" Then
                        Me.List5.AddItem Var1
                        End If
                        If Var6 Like "*HPUX*" Then
                        Me.List6.AddItem Var1
                        End If
                        If Var6 Like "*BULL*" Then
                        Me.List7.AddItem Var1
                        End If
                        If Var6 Like "*POSTPROD*" Then
                        Me.List8.AddItem Var1
                        End If
                        If Var6 Like "*NETWARE*" Then
                        Me.List8.AddItem Var1
                        End If
                End If
                DoEvents
            Next celltrouv
            wbExcel.Close SaveChanges:=False
            appExcel.Quit
            Set Rang = Nothing
            Set wsExcel = Nothing
            Set wbExcel = Nothing
            Set appExcel = Nothing
            PauseTime = 30 ' Définit la durée.
            Start = Timer   ' Définit l'heure de début.
            Do While Timer < Start + PauseTime
            DoEvents
            Loop
        Loop
End Sub

Private Sub Command2_Click()
Looping = False
End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Form_Load()
Text1.Visible = False
' Il faut que BorderStyle = 0 ' - None
' Mais quand même une caption pour qu'elle apparaisse
' dans la barre des tâches
Me.Caption = "SPYDT"

End Sub
Private Sub Form_Activate()
Dim ExStyle As Long, lResult As Long
lResult = ShowWindow(Me.hWnd, SW_HIDE)
ExStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
lResult = SetWindowLong(Me.hWnd, GWL_EXSTYLE, _
                         ExStyle Or WS_EX_APPWINDOW)
lResult = ShowWindow(Me.hWnd, SW_SHOW)
End Sub
Private Sub Form_Click()
Me.WindowState = vbMinimized
' Il n'y aura pas de menu système, ni sur la fenêtre
' ni sur le bouton de la barre des tâches
End Sub
Private Sub List1_Click()
Text1.Text = List1.Text
Var7 = Text1.Text
Var8 = Mid(Var7, 2, 5)
link = "http://BLABLA/Changements/default.asp?Changement=" & Var8
Shell "explorer.exe " & Chr(34) & link & Chr(34)
DoEvents
End Sub
Private Sub List2_Click()
Text1.Text = List2.Text
Var7 = Text1.Text
Var8 = Mid(Var7, 2, 5)
link = "http://BLABLA/Changements/default.asp?Changement=" & Var8
Shell "explorer.exe " & Chr(34) & link & Chr(34)
DoEvents
End Sub
Private Sub List3_Click()
Text1.Text = List3.Text
Var7 = Text1.Text
Var8 = Mid(Var7, 2, 5)
link = "http://BLABLA/Changements/default.asp?Changement=" & Var8
Shell "explorer.exe " & Chr(34) & link & Chr(34)
DoEvents
End Sub
Private Sub List4_Click()
Text1.Text = List4.Text
Var7 = Text1.Text
Var8 = Mid(Var7, 2, 5)
link = "http://BLABLA/Changements/default.asp?Changement=" & Var8
Shell "explorer.exe " & Chr(34) & link & Chr(34)
DoEvents
End Sub
Private Sub List5_Click()
Text1.Text = List5.Text
Var7 = Text1.Text
Var8 = Mid(Var7, 2, 5)
link = "http://BLABLA/Changements/default.asp?Changement=" & Var8
Shell "explorer.exe " & Chr(34) & link & Chr(34)
DoEvents
End Sub
Private Sub List6_Click()
Text1.Text = List6.Text
Var7 = Text1.Text
Var8 = Mid(Var7, 2, 5)
link = "http://BLABLA/Changements/default.asp?Changement=" & Var8
Shell "explorer.exe " & Chr(34) & link & Chr(34)
DoEvents
End Sub
Private Sub List7_Click()
Text1.Text = List7.Text
Var7 = Text1.Text
Var8 = Mid(Var7, 2, 5)
link = "http://BLABLA/Changements/default.asp?Changement=" & Var8
Shell "explorer.exe " & Chr(34) & link & Chr(34)
DoEvents
End Sub
Private Sub List8_Click()
Text1.Text = List8.Text
Var7 = Text1.Text
Var8 = Mid(Var7, 2, 5)
link = "http://BLABLA/Changements/default.asp?Changement=" & Var8
Shell "explorer.exe " & Chr(34) & link & Chr(34)
DoEvents
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
26 févr. 2011 à 19:14
Bonjour,

Il y a un controle en VB6 (WebBrowser) qui pourra te permettre de récupérer la page HTML sans passer par Excel, ensuite, il faudra la traiter.

Sinon concernant le code :
- Je vois très peu de commentaire, un code commenté est un code facile à débugger.

- Remarques sur une fonctions (mais peut s'appliquer aux autres) :
Private Sub List1_Click()
Text1.Text = List1.Text
Var7 = Text1.Text
Var8 = Mid(Var7, 2, 5)
link = "http://BLABLA/Changements/default.asp?Changement=" & Var8
Shell "explorer.exe " & Chr(34) & link & Chr(34)
DoEvents
End Sub


Quelques remarques :
- Code pas indenté, ça facilitera la lecture
- Var7 et Var8 sont des variables globales (au nom peu évocateur) alors qu'une visibilité limitée à la sub serait suffisante.
- Pour ouvrir une page web, ce n'est pas "explorer", mais "iexplore" (Internet Explorer)
- Le DoEvents ne sert pas à grand chose
- Chr(34) peut être remplacé par un double "", exemple : "Voici ""ma"" chaine"

D'une manière générale, évite le plus possible les variables globales, limites toujours la visibilité au maximum, car sinon, quand tu fera de gros programmes, ça te posera des soucis car parfois, sans le vouloir, une variable est utilisée à plusieurs endroits en même temps pour des buts différents.

Si tu travailles beaucoup avec VB6,; je te conseil d'utiliser l'add-in MZTools (gratuit pour VB6/VBA) qui te facilitera les recherches et l'analyse du code.

Mon site
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
26 févr. 2011 à 20:44
vraiment merci pour tes conseils je vais les appliquer de ce pas et continuer mes recherches.
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
28 févr. 2011 à 23:10
bonsoir,
le iexplorer.exe ne fonctionne pas tandis que explorer.exe fonctionne très bien.
Aussi je peux confirmer que l'url qu'il y a dans mon fichier excel dans les données externes qui tape bien sur un serveur sql.
Pour l'instant, j'ai une question, c'est comment intégrer cette requête dans mon appli vb6 et l'enlever du fichier excel.
d'après ce que j'ai pu trouver ici et là ça rassemble a du msquery.
si je veux faire ça c'est pour modifier cette requête via des variables depuis mon appli vb6 ça je sais faire.
j'ai trouvé ça :

sURL = "URL;" & "http://blablabla" & Var9 & "&opendate_to=" & Var10 & "&open_Type=2&start_Type=3&end_Type=3&saisie_Type=3&close_Type=3"

    'Create the QueryTable
   Dim sNWind As String
   sNWind = _
      sURL
   Dim oQryTable As Object
   Set oQryTable = wsExcel.QueryTables.Add( _
   "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      sNWind & ";", wsExcel.Range("A1"), "Select * from Orders")
   oQryTable.RefreshStyle = xlInsertEntireRows
   oQryTable.Refresh False

mais quand je lance le test il me dit en gros "xlInsertEntireRows variable non définie"
alors qu'il me semble que xlInsertEntireRows est un paramètre pour le refreshstyle
a noté que j'ai bien ajouté aux références microsoft jet and replication
mais ça me fait pareil
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
28 févr. 2011 à 23:22
Bonjour,

Peux-tu fournir un exemple de ce que te retourne ton URL, pour voir comment se passer d'Excel ?

Concernant xlInsertEntireRows, as-tu ajouter dans "Projet", "Références" puis "Microsoft Office xx.x Object Library" (xx.x à remplacer par ta version d'Office) ?

Mon site
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
28 févr. 2011 à 23:33
beh non j'ai pas ajouté cette référence pour travailler en objet et pas en excel.application
apparemment cela est préconisé pour ne pas avoir de problème de version pour les utilisateurs.
et puis je viens de l'ajouter et le test donne la même erreur :(
l'url me donne un tableau mis en forme web si je la copy/paste dans un navigateur.
quelles genres de précisions désires-tu ?
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
1 mars 2011 à 00:30
ok bon je sais pas pourquoi mais là ça marche a part que j'ai l'erreur pilote isam introuvable mais là je pense que c'est parce que je ne suis pas au boulot et qu'il ne peut pas trouver l'url.
j'essaye ça demain et je donnerai le résultat.
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
1 mars 2011 à 18:14
marche pas la requete
par contre est-ce que je ne pourrais pas plutôt utiliser un datagrid pour afficher mon url(requete sql) puis ensuite faite mon tri ?
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
1 mars 2011 à 21:54
Bonjour,

Dans ce cas, je te conseillerais de récupérer le contenu HTML du lien (contrôle Inet) Puis traiter le résultat pour le mettre dans un tableau dans ton appli et ensuite travailler dessus.

Mon site
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
3 mars 2011 à 15:51
pour finir j'ai contacter l'admin qui m'a filé les paramètres de connexion pour la base de données qui est du SQL
j'arrive à lister les table de cette base et je crois que pour avoir ce que je veux faire j'ai pas fini de me prendre la tête. mais je lache pas :)
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
3 mars 2011 à 18:49
bon je dois etre complétement débile ou bien la table est vide
mais comment faites-vous pour afficher le recorset de ma requete dans un tableau ?
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
4 mars 2011 à 22:55
Bonjour,

As-tu regardé le contenu de ton recordset ?
Peux-tu montrer le code qui te permet de faire ta requête (et la requête qui va avec) ?

Mon site
0
raynald31 Messages postés 31 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 27 novembre 2014
5 mars 2011 à 11:43
pour finir c'est bon j'ai tout bien paramétré en passant par l'assistant base de données
et en fait je dois dire que c'est bien plus simple que ce que a quoi je m'attendais
Par contre pour mes requêtes je dois être sur site.
j'ai trouvé la table déja qui m'affiche l'id des changements en cours donc déjà c'est plus simple qu'avec excel :)
je te tiens au courant de l'avancement et encore merci de tes réponses.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
5 mars 2011 à 14:53
D'accord, bon courage et bon codage.
0
Rejoignez-nous