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 :

Requête et différence entre valeur souhaitée et valeur extraite. [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut Requête et différence entre valeur souhaitée et valeur extraite.
    Bonjour le forum,

    Je rencontre un problème et ne comprends absolument pas d'où il vient. Voici le bout de code qui n'affecte pas les résultats souhaités par rapport à ce qui se situe dans la base de données. En effet, pour certains P5 (Lignes budgétaires) les résultats correspondent à la virgule près à ce que j'ai dans ma base de données, mais pour certains d'entre eux j'ai une différence de plusieurs milliers d'euros...

    Ma plage de date prend en compte 100% des valeurs qui sont stockées dans la Base de Données. Les plus anciennes datent d'avant le 15 Novembre 2019 et les plus récentes d'avant le 25 Février 2020 (valeur que j'ai renseigné en B4).
    La syntaxe est par ailleurs rigoureusement identique entre la colonne P5 de la BDD et les valeurs renseignées dans la Colonne 1.

    Sauriez-vous d'où pourrait venir ce problème ?

    Merci pour votre aide, et voici le code incriminé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set Rst = Cnn.Execute("SELECT SUM(PayéTTC) FROM [" & Feuille & Cellule & "] WHERE P5 = '" & Cells(i, 1) & "' AND (DATE BETWEEN #15/11/2019# AND #" & CDate(Range("B4").Value) & "#)")
    Cells(i, 3).CopyFromRecordset Rst
    Je précise qu'il s'agit-là de valeurs monétaires que je souhaiterai extraire. Comment devrai-je m'y prendre ? Je suis complètement perdu et ne peux me permettre de proposer un fichier erroné. De plus, mes délais sont assez courts puisque je dois présenter ce document (ou du moins cette partie) fin de semaine. Je pense que je tiens le bout et que ce problème est sûrement celui qui me bloque le +.

  2. #2
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Je vous joins le code complet de la procédure.

    J'ai essayé de différentes manières pour les dates... En écrivant en brut (entre les #) la date, en format Anglais, Américain... en l'écrivant en format Anglais, Américain dans les cellules et en utilisant la fonction CDate... J'ai dû tester environ 5 ou 6 façons différentes d'écrire les dates (qui fonctionnaient, je ne compte pas le nombre d'erreurs de manipulation de dates et de combinaisons de critères que j'ai eues )


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Option Explicit
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cnn As ADODB.Connection, CnBud As ADODB.Connection, CnCmd As ADODB.Connection
    Dim Rst As ADODB.Recordset, RstBud As ADODB.Recordset, RstCmd As ADODB.Recordset
    Dim Fichier As String, Cellule As String, Feuille As String, nomSite As String, FichierBud As String, CellBud As String, FichierCmd As String, CellCmd As String
    Dim n As Integer, i As Integer, nbud As Integer, ncmd As Integer
    Dim date_debut As Date
     
    nomSite = Range("C2").Value
    Feuille = "2019$"
    Fichier = "Z:\PBR_LOG\ARIBA_2019\TestVBA\TOTAL\TOTALNord-Est.xlsx"
    FichierBud = "Z:\PBR_LOG\ARIBA_2019\TestVBA\Budget\BudgetNord-Est.xlsx"
    FichierCmd = "Z:\PBR_LOG\ARIBA_2019\TestVBA\Commandes\CommandesNord-Est.xlsx"
    date_debut = Range("B4").Value
     
        If Target.Address = "$C$2" Or Target.Address = "$B$4" Then
            Set Cnn = New ADODB.Connection
            Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties='Excel 12.0;HDR=yes'"
     
            Set CnBud = New ADODB.Connection
            CnBud.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FichierBud & ";Extended Properties='Excel 12.0;HDR=yes'"
     
            Set CnCmd = New ADODB.Connection
            CnCmd.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FichierCmd & ";Extended Properties='Excel 12.0;HDR=yes'"
     
            Set Rst = Cnn.Execute("SELECT count(*) as nb FROM [" & Feuille & "]")
            n = Rst("nb")
            Cellule = "A3:AE" & n - 2
     
            Set RstBud = CnBud.Execute("SELECT count(*) as nb FROM [" & Feuille & "]")
            nbud = RstBud("nb")
            CellBud = "A3:I" & nbud + 1
     
            Set RstCmd = CnCmd.Execute("SELECT count(*) as nb FROM [" & Feuille & "]")
            ncmd = RstCmd("nb")
            CellCmd = "A3:K" & ncmd + 1
     
            Set Rst = New ADODB.Recordset
            Set RstBud = New ADODB.Recordset
            If Range("C2").Value = "TOTAL" Then
                For i = 9 To 45
                    Set Rst = Cnn.Execute("SELECT SUM(PayéTTC) FROM [" & Feuille & Cellule & "] WHERE P5 = '" & Cells(i, 1) & "' AND (DATE BETWEEN #" & CDate(Range("B4").Value) & "# AND #" & CDate(Range("B5").Value) & "#)")
                    Cells(i, 3).CopyFromRecordset Rst
     
                    Set RstBud = CnBud.Execute("SELECT SUM (Alloué) FROM [" & Feuille & CellBud & "] WHERE P5 = '" & Cells(i, 1) & "'")
                    Cells(i, 2).CopyFromRecordset RstBud
     
                    Set RstCmd = CnCmd.Execute("SELECT SUM(TotalHT) FROM [" & Feuille & CellCmd & "] WHERE P5 = '" & Cells(i, 1) & "'")
                    Cells(i, 4).CopyFromRecordset RstCmd
                Next i
            Else
                For i = 9 To 45
                    Set Rst = Cnn.Execute("SELECT SUM(PayéTTC) FROM [" & Feuille & Cellule & "] WHERE SITE = '" & nomSite & "' AND P5 = '" & Cells(i, 1) & "' AND (DATE BETWEEN #" & CDate(Range("B4").Value) & "# AND #" & CDate(Range("B5").Value) & "#)")
                    Cells(i, 3).CopyFromRecordset Rst
     
                    Set RstBud = CnBud.Execute("SELECT SUM(Alloué) FROM [" & Feuille & CellBud & "] WHERE SITE = '" & nomSite & "' AND P5 = '" & Cells(i, 1) & "'")
                    Cells(i, 2).CopyFromRecordset RstBud
     
                    Set RstCmd = CnCmd.Execute("SELECT SUM(TotalHT) FROM [" & Feuille & CellCmd & "] WHERE SITE = '" & nomSite & "' AND P5 = '" & Cells(i, 1) & "'")
                    Cells(i, 4).CopyFromRecordset RstCmd
                Next i
            End If
        End If
    End Sub
    Nom : help.JPG
Affichages : 175
Taille : 76,1 Ko

    Ci-dessus vous trouverez le format que je cherche.

    En seconde colonne, ma requête fonctionne parfaitement et me sort les valeurs que je souhaite pour le Budget Logistique.
    En quatrième colonne, ma requête me sort les informations souhaitées aussi, bien que je devrais la modifier avec des dates dans le futur, mais je n'y touche pas tant que je n'ai pas réglé le problème présent.
    En troisième colonne, c'est là où ça pose problème... La boucle s'effectue bien de la ligne Code 1 à Code 37, mais pour certaines lignes... la requête de Somme ne me renvoie pas la valeur souhaitée, et pour d'autres si... C'est à n'y rien comprendre...




    ...encore une erreur de lecture de colonne de ma part... J'ai vraiment besoin de repos je crois

    Navré du dérangement, mon code fonctionne pour les intéressés. Si optimisation il y a, je suis preneur !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre valeur minimale et maximale
    Par sihem_info dans le forum Développement
    Réponses: 2
    Dernier message: 10/09/2018, 15h28
  2. différence entre valeur à lire et valeur lue
    Par Infra_Red dans le forum Fortran
    Réponses: 2
    Dernier message: 28/05/2014, 21h08
  3. [DATA] Nouvelle variable : différence entre valeur ligne i et ligne i+1
    Par granchef dans le forum SAS Base
    Réponses: 1
    Dernier message: 29/11/2013, 14h04
  4. Réponses: 4
    Dernier message: 29/06/2009, 09h22
  5. Différence entre valeur et valeur boucle+1
    Par jaireimy dans le forum LabVIEW
    Réponses: 5
    Dernier message: 25/11/2008, 17h24

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