IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Base de donnée requête SQL VBA


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut Base de donnée requête SQL VBA
    Bonjour,

    J'ai une base de donnée avec NOM, PRENOM, FONCTION, ENGIN DATE_DEBUT et DATE_FIN (format jj/mm/aaaa hh:mm:ss)
    J'ai réalisé une connexion ADO avec une requête qui recherche la somme du volume d'heure en fonction des critères fonction et engin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Sub sbADO() 'Requêtes avec critères fonction et engins
    Dim sSQLQry As String
    Dim ReturnArray
     
    Dim Conn As New ADODB.Connection
    Dim mrs As New ADODB.Recordset
     
    Dim DBPath As String, sconnect As String
    Dim fct As String, Engin As String
    fct = Range("L8").Text
    Engin = Range("M8").Text
     
    efface
    DBPath = ThisWorkbook.FullName
     
     
    sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';"
     
    Conn.Open sconnect
       sSQLSting = "SELECT GRADE,NOM,PRENOM,SUM(DATE_FIN-DATE_DEBUT) AS Total_H From [Data$] WHERE FONCTION = '" & fct & "' AND ENGIN = '" & Engin & "' GROUP BY GRADE,NOM,PRENOM  ORDER BY GRADE,NOM,PRENOM "
     
        mrs.Open sSQLSting, Conn
     
            ActiveSheet.Range("B10").CopyFromRecordset mrs
     
        mrs.Close
     
     
    Conn.Close
     
    Call classement.classement
    End Sub
    Dans le regroupement, je voudrais ajouté dans une dernière colonne la différence entre la date de fin et la date début ( résultat en heures), pour chaque nom et pour chaque date distinctes.
    Ainsi si j'ai 30 heures dans Total_H pour une fonction et un engin, je voudrais connaitre le nombre d'heure pour chaque date distinctes.
    Exemple :
    Ligne sur la feuille Data :
    DUPOND Véhicule1 conducteur 25/01/2015 8:00 25/01/2015 20:00
    DUPOND véhicule1 conducteur 26/01/2015 8:00 26/01/2015 20:00
    DUPOND véhicule2 passager 27/02/2015 8:00 27/02/2015 20:00
    DUPOND Véhicule3 passager 27/02/2015 8:00 27/02/2015 20:00

    Si je recherche Véhicule1 et conducteur en critère j'obtiens 24 heures pour DUPOND
    Je souhaiterais une colonne qui m'indique que DUPOND à fait 24 h/36h de véhicule1 et conducteur.
    Merci pour votre aide

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour

    Citation Envoyé par jopont Voir le message
    Dans le regroupement, je voudrais ajouté dans une dernière colonne la différence entre la date de fin et la date début ( résultat en heures), pour chaque nom et pour chaque date distinctes
    ...
    Je souhaiterais une colonne qui m'indique que DUPOND à fait 24 h/36h de véhicule1 et conducteur.
    Je n'ai pas compris dans ton exemple d'où sortait les 36h.

    Si tu veux une info par date, tu dois :
    • choisir le champ date (puisque en BD tu en as 2 : début et fin)
    • mettre ce champ en regroupement.



    Cordialement,

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Je ne comprends pas bien,tu parle du regroupement,ce qui sous entend requête!
    Et tu parle également 36h en heures et pas en dates dans Excel!

    Dans Excel le format "[h]:mm:ss" suffit pour afficher 36:23:30?????

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Le 36 heures sortent du fait que DUPOND est présent les 25, 26 et 27 janvier de 8 h à 20 h.
    Cela nous fait bien 36 heures.
    Parmi ces 36 heures, il a été 24 heures de Véhicule 1 et conducteur.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Oui mais le fait que Excel affiche une date c'est lié au format de cellules!

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut
    Bonjour,
    Oui c'est lié au format de cellule, car je peux avoir des enregistrements dans ma feuille Data comme ci-dessous :

    DURAND véhicule 3 conducteur 28/02/2015 8:00 au 01/03/2015 07:00.

    Faut-il faire un fenêtrage de la première requête ?

    Merci

  7. #7
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ActiveSheet.Columns("B:B").NumberFormat = "[h]:mm:ss"
     ActiveSheet.Range("B10").CopyFromRecordset mrs

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Je vais essayer de me ré expliquer :

    Ma macro va bien chercher les noms avec les critères demandés. Sur la feuille j'ai bien les grades nom prénoms et le nombres d'heures en fonction des critères.
    Je voudrais une cinquième colonne qui me donne le nombre d'heures distinctes sur chaque date ou apparaît le nom.
    Ligne sur la feuille Data :
    DUPOND Véhicule1 conducteur 25/01/2015 8:00 25/01/2015 20:00
    DUPOND véhicule1 conducteur 26/01/2015 8:00 26/01/2015 20:00
    DUPOND véhicule3 conducteur 27/02/2015 8:00 27/02/2015 20:00
    DUPOND Véhicule3 passager 27/02/2015 8:00 27/02/2015 20:00
    DURAND véhicule 3 conducteur 28/02/2015 8:00 au 01/03/2015 07:00.
    DURAND véhicule 4 passager 28/02/2015 8:00 au 01/03/2015 07:00.
    DURAND véhicule 5 passager 28/02/2015 8:00 au 28/02/2015 20:00.
    DURAND véhicule 4 conducteur 02/03/2015 8:00 au 03/03/2015 07:00.

    Si je sélectionne les critères véhicule1 et conducteur, mon recordset va afficher DUPOND 24 heures. DURAND ne s'affichera pas.
    Je voudrais une colonne qui me donne DUPOND 24 heures de véhicule1 conducteur sur 36 heures.
    36 heures car il est présent les 25, 26 et 27 sur une période de 12 heures.

    Si je sélectionne les critères véhicule3 conducteur, mon recordset affichera :
    DUPOND 12 heures
    DURAND 24 heures
    Je voudrais une colonne qui m'affiche :
    DUPOND 12 heures sur 36 heures
    DURAND 24 heures sur 48 heures
    car DURAND est présent 24heures le 28 et 24 heures le 02 mars.

    Merci

  9. #9
    Invité
    Invité(e)
    Par défaut
    bonjour,
    regard ça!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sSQLSting = "select GRADE,NOM,PRENOM ,'' & format(Total_H,'hh') & '/' & toto From ("
    sSQLSting = sSQLSting & "SELECT GRADE,NOM,PRENOM,SUM(DATE_FIN-DATE_DEBUT) AS Total_H ,(DateDiff('d',[DATE_DEBUT],[DATE_FIN])+1)*24 as toto From [Data$] WHERE FONCTION = 'conducteur' AND ENGIN = 'Véhicule1' GROUP BY GRADE,NOM,PRENOM,(DateDiff('d',[DATE_DEBUT],[DATE_FIN])+1)*24) as frm ORDER BY frm.GRADE,frm.NOM,frm.PRENOM "
    Dernière modification par Invité ; 02/03/2015 à 11h28.

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut
    Merci pour cette réponse, mais j'ai plusieurs ligne pour un même nom.
    Je devrait avoir qu'une seule ligne...

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    test ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sSQLSting = "select GRADE,NOM,PRENOM ,(left(format(Total_H,'#0.0000000000'),len(format(Total_H,'#0.0000000000'))-11)*24 )+format(Total_H,'h')  & ':' & format(Total_H,'n') & ' /' & (left(format(Total_H,'#0.0000000000'),len(format(Total_H,'#0.0000000000'))-11)+1)*24  From ("
    sSQLSting = sSQLSting & "SELECT GRADE,NOM,PRENOM,SUM(DATE_FIN-DATE_DEBUT) AS Total_H From [Data$] WHERE  FONCTION = '" & fct & "' AND ENGIN = '" & Engin & "' GROUP BY GRADE,NOM,PRENOM) as frm ORDER BY frm.GRADE,frm.NOM,frm.PRENOM "

Discussions similaires

  1. Base Oracle et requêtes SQL sous VBA
    Par Filippo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/03/2015, 09h54
  2. [XL-2010] Base Oracle et requêtes SQL sous VBA
    Par Crysta17 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 18/04/2014, 12h25
  3. Modifier propriété <source base> d'une requête par VBA ou SQL?
    Par 1010titi dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 26/11/2008, 21h16
  4. exo base de donnée avec SQL
    Par chti_juanito dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/11/2005, 16h02
  5. probleme avec une base de donnée postgres SQL
    Par Alexlesilex dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/06/2005, 22h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo