Mise en forme Macro vba

tijocanard

XLDnaute Nouveau
Bonour.

Alors mon problème est une question de mise en forme d'un résultat d'une macro.

Je m'explique: J'ai créé sous excel une macro qui se connecte à une base oracle et qui renvois le résultat sur ma feuille excel.

Ma macro:

Code:
Private Sub CommandButton1_Click()
With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=id;PWD=pwd;SERVER=server;", _
        Destination:=Range("A1"))
        .CommandText = Array( _
        "SELECT Sum(histo_event_tr.QTE_PROD)as quantite, sysdate" & Chr(13) & "" & Chr(10) & "FROM DEPT_85.histo_event_tr histo_event_tr, DEPT_85.histo_tr histo_tr" & Chr(13) & "" & Chr(10) & "WHERE histo_event_tr.ID_HISTO = histo_tr.ID_HISTO AND ((histo_event_tr.ID_RESS_HIST" _
        , _
        "O='UPAV3_CU11_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU12_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to" _
        , _
        "_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU21_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_even" _
        , _
        "t_tr.ID_RESS_HISTO='UPAV3_CU22_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')))" _
        )
        .Name = "Lancer la requête à partir de oracle"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertEntireRows
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 15
        .PreserveColumnInfo = False
        .Refresh BackgroundQuery:=False
    End With
End Sub

Donc ma macro me renvoie bien une quantité à une heure donnée. :)
Le problème arrive: ma macro se rafraichit toutes les 15min et le nouveau résultat se met en cellulle A1
Normal car j'ai mis:
Code:
Destination:=Range("A1"))

comment faire pour afficher les nouveau résultat en dessous du premier résultat? :eek:

J'espere que c'est clair!

L'autre problème est que à chaque rafraichissement, il me remet les entêtes des colonnes (quantité et sysdate), je ne voudrais que le résultat.

De sorte que j'obtienne un tableau pour générer plus tard un graphique.

J'ai bien essayé de bidoullier dans ces options mais j'y arrive pas.

Code:
.FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertEntireRows
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 15
        .PreserveColumnInfo = False
        .Refresh BackgroundQuery:=False

Je débute en vba et votre aide sera précieuse.:rolleyes:
 

Pièces jointes

  • Equipe1.zip
    19.1 KB · Affichages: 28
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Mise en forme Macro vba

Bonjour mon canard ;)

Bienvenue sur XLD

un essai

VB:
Private Sub CommandButton1_Click()
Dim Ligne as Long
Ligne = Range("A65536").end(XluP).row+1
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DRIVER={Microsoft ODBC for Oracle};UID=id;PWD=pwd;SERVER=server;", _
Destination:=Range("A" & Ligne))
.CommandText = Array( _
"SELECT Sum(histo_event_tr.QTE_PROD)as quantite, sysdate" & Chr(13) & "" & Chr(10) & "FROM DEPT_85.histo_event_tr histo_event_tr, DEPT_85.histo_tr histo_tr" & Chr(13) & "" & Chr(10) & "WHERE histo_event_tr.ID_HISTO = histo_tr.ID_HISTO AND ((histo_event_tr.ID_RESS_HIST" _
, _
"O='UPAV3_CU11_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU12_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to" _
, _
"_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU21_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_even" _
, _
"t_tr.ID_RESS_HISTO='UPAV3_CU22_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')))" _
)
.Name = "Lancer la requête à partir de oracle"
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertEntireRows
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 15
.PreserveColumnInfo = False
.Refresh BackgroundQuery:=False
.Delete
End With
End Sub

Edit : Bon, dans l'état, tu devras cliquer sur le bouton toutes les 15 minutes..
Dis-moi déjà si ça crée une nouvelle ligne à chaque clic
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Mise en forme Macro vba

Re,

Euh... non à False : Tu ne veux pas les noms de champs, donc il faut mettre FieldNames à False :rolleyes:

Edit : Pour qu'ils soient affichés une fois, je vais proposer quelque chose de trés compliqué : les taper dans la 1ère ligne...
 
Dernière édition:

tijocanard

XLDnaute Nouveau
Re : Mise en forme Macro vba

si tu as raison (désolé j'ai réédité mon post entre temps)!

Donc dans l'état: le rafraichissement auto ne se fait pas et je suis obligé d'appuyer sur le bouton.
Les résultats sont bien les uns en dessous des autre sans les en-têtes mais comment les afficher qu'une seule fois?

Je te remets mon code dans l'état
Code:
Private Sub CommandButton1_Click()
Dim Ligne As Long
Ligne = Range("A65536").End(xlUp).Row + 1
With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=dept_85;PWD=dept_85;SERVER=producim;", _
        Destination:=Range("A" & Ligne))
        .CommandText = Array( _
        "SELECT Sum(histo_event_tr.QTE_PROD)as quantite, sysdate " & Chr(13) & "" & Chr(10) & "FROM DEPT_85.histo_event_tr histo_event_tr, DEPT_85.histo_tr histo_tr" & Chr(13) & "" & Chr(10) & "WHERE histo_event_tr.ID_HISTO = histo_tr.ID_HISTO AND ((histo_event_tr.ID_RESS_HIST" _
        , _
        "O='UPAV3_CU11_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU12_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to" _
        , _
        "_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU21_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_even" _
        , _
        "t_tr.ID_RESS_HISTO='UPAV3_CU22_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')))" _
        )
        .Name = "Lancer la requête à partir de oracle"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertEntireRows
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 1
        .PreserveColumnInfo = False
        .Refresh BackgroundQuery:=False
        .Delete
    End With
End Sub

ou je peux trouver des infos sur toutes les options .FieldNames , RowNumbers...
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Mise en forme Macro vba

Re,

Bizarre, ça ne le fait pas chez moi

essaye

Code:
.RefreshPeriod = 0

pour voir

Edit:

ou je peux trouver des infos sur toutes les options .FieldNames , RowNumbers...

Ce sont les options que tu trouves dans les propriétés de la plage de données
Si tu fait des données Externes, et que tu affiche la barre d'outils Données externes, tu as un bouton "Propriétés de la plage de données"
 
Dernière édition:

tbft

XLDnaute Accro
Re : Mise en forme Macro vba

Bonjour

pour afficher les entêtes une seule fois, avez vous essayé d'utiliser une variable de type boolean ex tag_entete.
de l'initialiser à true au tout début de la macro, puis remplacer
Code:
.FieldNames = False
par
Code:
.FieldNames = tag_entete
tag_entete=false
 

tijocanard

XLDnaute Nouveau
Re : Mise en forme Macro vba

J'ai modifié ma macro comme me la dit tbft, ca a l'air de fonctionner.
Je laisse tourner ma macro quelques heures et je vous tiend au courant :)

Car prochaine étape: créer un graphique :D

Et sinon un grand merci à vous 2!
 
Dernière édition:

tijocanard

XLDnaute Nouveau
Re : Mise en forme Macro vba

Bon apres quelques heures d'execution, ca merdouille.

il me créer pas de ligne a chaque rafraichissement (alors que ce matin oui), il écrase l'ancien résultat.

Mais si j'utilise mon bouton il me créer bien une ligne a chaque fois (mais avec les en-têtes)
:confused:

Excel garde t-il des anciens paramètres en mémoire?
Ou je suis un boulet et la il faut me le dire :D


Ma macro complète:
Code:
Private Sub CommandButton1_Click()
[COLOR="Red"]Dim tag_entete As Boolean
tag_entete = True
Dim Ligne As Long
Ligne = Range("A65536").End(xlUp).Row + 1[/COLOR]
With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=dept_85;PWD=dept_85;SERVER=producim;", _
        [COLOR="red"]Destination:=Range("A" & Ligne))[/COLOR]        
        .CommandText = Array( _
        "SELECT Sum(histo_event_tr.QTE_PROD)as quantite, sysdate" & Chr(13) & "" & Chr(10) & "FROM DEPT_85.histo_event_tr histo_event_tr, DEPT_85.histo_tr histo_tr" & Chr(13) & "" & Chr(10) & "WHERE histo_event_tr.ID_HISTO = histo_tr.ID_HISTO AND ((histo_event_tr.ID_RESS_HIST" _
        , _
        "O='UPAV3_CU11_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU12_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to" _
        , _
        "_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU21_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_even" _
        , _
        "t_tr.ID_RESS_HISTO='UPAV3_CU22_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')))" _
        )
        .Name = "Stat Equipe1"
        [COLOR="red"].FieldNames = tag_entete
         tag_entete = False[/COLOR]
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertEntireRows
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 1
        .PreserveColumnInfo = False
        .Refresh BackgroundQuery:=False
    End With
End Sub

En rouge toutes les modif éffectuées
 
Dernière édition:

tbft

XLDnaute Accro
Re : Mise en forme Macro vba

Bonjour

N'y aurais t'il pas eu un débordement?
nombre de ligne total>65536...

VB:
Private Sub CommandButton1_Click()
Dim tag_entete As Boolean
Dim Ligne As Long
tag_entete = True
Ligne = Range("A65536").End(xlUp).Row + 1
With ActiveSheet.QueryTables.Add(Connection:= "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=dept_85;PWD=dept_85;SERVER=producim;", Destination:=Range("A" & Ligne))        
        .CommandText = Array( "SELECT Sum(histo_event_tr.QTE_PROD)as quantite, sysdate" & Chr(13) & "" & Chr(10) & "FROM DEPT_85.histo_event_tr histo_event_tr, DEPT_85.histo_tr histo_tr" & Chr(13) & "" & Chr(10) & "WHERE histo_event_tr.ID_HISTO = histo_tr.ID_HISTO AND ((histo_event_tr.ID_RESS_HIST" , "O='UPAV3_CU11_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU12_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to",        "_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU21_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')) OR (histo_even" ,         "t_tr.ID_RESS_HISTO='UPAV3_CU22_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhhmi')))" )
        .Name = "Stat Equipe1"
        .FieldNames = tag_entete
         tag_entete = False
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertEntireRows
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 1
        .PreserveColumnInfo = False
        .Refresh BackgroundQuery:=False
    End With
End Sub

juste comme ça
 
Dernière édition:

tijocanard

XLDnaute Nouveau
Re : Mise en forme Macro vba

non, la macro se rafraichit toutes les 15 min et je l'ai laissé tourner que 2h ce midi

Ce qui est bizarre est que la macro réagit de 2 manières:

rafraichissement auto, elle remplace l'ancien enregistrement par le nouveau
rafraichissement manuel avec le bouton, un nouvel enregistrement apparait bien en dessous de l'ancien mais remonte ensuite tous les enregistrements pour effacer les valeurs :confused:

Voir le fichier pour mieux comprendre
 

Pièces jointes

  • Equipe.zip
    16.4 KB · Affichages: 26
  • Equipe.zip
    16.4 KB · Affichages: 29
  • Equipe.zip
    16.4 KB · Affichages: 26
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Mise en forme Macro vba

Bonjour tbft,
Re,

Il faudra m'expliquer à quoi servent les lignes

Code:
tag_entete = [COLOR=#0000fc]True[/COLOR]
...
        .FieldNames = tag_entete
         tag_entete = [COLOR=#0000fc]False[/COLOR]

moi je mettrais plutôt à la place

Code:
.FieldNames = (Ligne = 2)

mais bon..

rafraichissement auto, elle remplace l'ancien enregistrement par le nouveau
rafraichissement manuel avec le bouton, un nouvel enregistrement apparait bien en dessous de l'ancien mais remonte ensuite tous les enregistrements pour effacer les valeurs

C'est tout à fait normal
Les données externes se regénèrent toujours au même endroit
Pour qu'elles se génèrent dans une nouvelle ligne il faut utiliser le bouton
Dans le code que je t'avais proposé il y avait un

Code:
.Delete

que vous avez fait disparaître : mauvaise idée

j'avais posté à 9h26 :

Bon, dans l'état, tu devras cliquer sur le bouton toutes les 15 minutes..
Dis-moi déjà si ça crée une nouvelle ligne à chaque clic
 

tijocanard

XLDnaute Nouveau
Re : Mise en forme Macro vba

que vous avez fait disparaître : mauvaise idée

simple oubli et non pas une volonté d'ignorer ton code!

j'ai fais toutes tes modif:
Bon, dans l'état, tu devras cliquer sur le bouton toutes les 15 minutes..
Dis-moi déjà si ça crée une nouvelle ligne à chaque clic

ca créé bien une ligne au moment ou je clique et les en-têtes sont bien partis.
donc encore merci et alors comment faire pour automatiser ca
 

Discussions similaires

Réponses
4
Affichages
2 K
Réponses
22
Affichages
4 K

Statistiques des forums

Discussions
314 630
Messages
2 111 384
Membres
111 118
dernier inscrit
gmc