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 :

pb avec requête sql max [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 212
    Points : 0
    Points
    0
    Par défaut pb avec requête sql max
    bonjour
    je suis embêté avec mes requêtes sql en vba

    quand j’exécute la requêtes sql max, elle me retourne toujours 9 alors qu'il y a le chiffre 10 dans la base(voir capture d'écran)
    je suppose que c'est parce que ce sont des valeurs texte et pas numérique?

    comment forcer un enregistrement en valeur numérique dans la base (fichier excel)?
    ou
    comment procéder autrement?



    Nom : capture d'écran.jpg
Affichages : 417
Taille : 35,6 Ko

    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
    Public cn, rst As Variant
     
     
    Sub Sql()
     
     
    'Connection
    Set cn = New ADODB.Connection
    With cn
     .Provider = "Microsoft.ACE.OLEDB.12.0"
     .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\base de donnée.xlsb" & ";Excel 12.0;HDR=YES"
     .Open
    End With
    'Définit la requête.
    Set rst = New ADODB.Recordset
     
     
    'définition de la requette sql( récupération du dernier n° de feuille atdec)
    TexteSQL_N_d_archivage = "SELECT max(test1)FROM [bdd$]"
     
    'Ecrit le résultat de la requête feuille atdec sélectionnée dans la cellule
    Set rst = cn.Execute(TexteSQL_N_d_archivage)
    ThisWorkbook.Worksheets("feuil1").Range("a1").CopyFromRecordset rst
     
    'ajout d'un numéros de feuille atdec
    ThisWorkbook.Worksheets("feuil1").Range("a1") = ThisWorkbook.Worksheets("feuil1").Range("a1") + 1
     
    'définition de la requette sql
    TexteSQL_archivage_gamme_de_tri = "INSERT INTO [bdd$] (test1) VALUES (" & ThisWorkbook.Worksheets("feuil1").Range("a1") & ")"
     
    'met à jour ajout d'une gamme de tri dans la base
    cn.Execute TexteSQL_archivage_gamme_de_tri
     
     
    'close
    cn.Close
    Set cn = Nothing
     
     
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 524
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 524
    Points : 16 460
    Points
    16 460
    Par défaut
    Bonjour

    Pourquoi le BDD contient-elle du texte ?

    Un texte n'a ni maxi ni mini...

    Si tu tu donnais davantage d'info sur le contexte réel ?

    D'autant qu'avec 2016, tu as peut-être davantage intérêt à utiliser PowerQuery que ADO

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 212
    Points : 0
    Points
    0
    Par défaut
    Je pense que oui, c est bien ca le pb
    Mais comment faire pour que les valeurs sont numériques, j ai des en tete sur chaque colonne, voir fichier joint

  4. #4
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 791
    Points : 1 465
    Points
    1 465
    Billets dans le blog
    2
    Par défaut
    Bonjour à tous,

    Un texte n'a ni maxi ni mini
    si, en alphanumérique, "9">"10'

  5. #5
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 524
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 524
    Points : 16 460
    Points
    16 460
    Par défaut
    Re tous

    Citation Envoyé par tototiti2008 Voir le message
    Bonjour à tous,

    si, en alphanumérique, "9">"10'
    Mais mais max sur ces 2 textes donne 0 de même que min (et encore dans EXcel cela dépend comment les données sont saisies...)

    Citation Envoyé par monfiston Voir le message
    ...
    Mais comment faire pour que les valeurs sont numériques, j ai des en tete sur chaque colonne, voir fichier joint
    Aucun rapport entre l'en-tête et le type de données

    Et tu ne réponds toujours pas aux questions posées...

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 212
    Points : 0
    Points
    0
    Par défaut
    Je veux bien, mais je ne comprends pas la question?
    C est pour çà que j ai mis mes fichiers dans le 1 post

    Je ne sais pas enregistrer une valeur numérique dans une base de donnée Excel en sql!!

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 212
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par 78chris Voir le message
    Bonjour

    Pourquoi le BDD contient-elle du texte ?

    Un texte n'a ni maxi ni mini...

    Si tu tu donnais davantage d'info sur le contexte réel ?

    D'autant qu'avec 2016, tu as peut-être davantage intérêt à utiliser PowerQuery que ADO

    malheureusement, je ne peux pas, car certain pc fonctionne avec 2016, d'autre avec 365 et d'autre sous 2013

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT MAX(test1*1) FROM [bdd$]"

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 212
    Points : 0
    Points
    0
    Par défaut
    parfait, merci, ça fonctionne
    il y a un moyen sinon d'enregistrer directement dans la base de données en numérique?

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 212
    Points : 0
    Points
    0
    Par défaut
    du coup ça sert à quoi de mettre les valeurs que l'on veut enregistrer dans la base entre les apostrophes?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TexteSQL = "INSERT INTO [bdd$] (test1) VALUES (' " & ThisWorkbook.Worksheets("feuil1").Range("a1") & ' ")"

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour

    Pour écrire dans un classeur fermé le type de données est imposé par les données précédentes, en général si je ne me trompe pas 8 lignes.
    Pour pallier à ça, mets le chiffre 0 dans la ligne 2 de ta base de données (juste en dessous de la ligne des titres. Tu peux éventuellement cacher cette ligne.

    Ensuite on ajoute au ConnectionString le MAXSCANROWS=1
    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
    Sub Sql()
    Dim TexteSQL_N_d_archivage As String, TexteSQL_archivage_gamme_de_tri As String
    Dim Cn As Object, Rst As Object
    Dim Nb
     
    'Connection
    Set Cn = CreateObject("ADODB.Connection")
    With Cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\base de donnée.xlsm" & ";Excel 12.0;HDR=YES;MAXSCANROWS=1"
        .Open
    End With
    'Définit la requête.
    'définition de la requette sql( récupération du dernier n° de feuille atdec)
    TexteSQL_N_d_archivage = "SELECT MAX(test1)FROM [bdd$]"
     
    'Ecrit le résultat de la requête feuille atdec sélectionnée dans la cellule
    Set Rst = CreateObject("ADODB.Recordset")
    Set Rst = Cn.Execute(TexteSQL_N_d_archivage)
    Nb = Rst.GetRows
    Rst.Close
    Set Rst = Nothing
     
    'définition de la requette sql
    TexteSQL_archivage_gamme_de_tri = "INSERT INTO [bdd$] (test1) VALUES (" & Nb(0, 0) + 1 & ")"
    'met à jour ajout d'une gamme de tri dans la base
    Cn.Execute TexteSQL_archivage_gamme_de_tri
    'close
    Cn.Close
    Set Cn = Nothing
    End Sub
    PS, j'ai utilisé GetRows de Rst

  12. #12
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 501
    Points : 2 297
    Points
    2 297
    Par défaut
    Citation Envoyé par monfiston Voir le message
    bonjour,
    en fait ça sert à mettre du texte dans un champ texte, pour des numérique on ne mettra pas d'apostrophes!

    mais comment s'avoir si c'est un champ texte ou un numérique,date etc... vue que c'est ADO qui fige par apprentissage sur 8 ligne comme précisé par mercatog,sur un fichier vierge!

    en fait par défaut tout est texte tu ne peux en aucun cas partir d'un fichier ou seul figure les entête de colonne! il te faut prévoir une ligne perdu!

    il en va de même pour les champs texte de plus de 255 caractères!

    comme le dit Clément Marcotte Excel n'est pas une SGBD!

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 212
    Points : 0
    Points
    0
    Par défaut
    ok, merci je comprend mieux

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 212
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT MAX(test1*1) FROM [bdd$]"
    tu n'aurais pas la même astuce, sur une base Access?
    car je ne veux pas modifier la base Access

  15. #15
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu fais ta requête dans Access. Tu auras le SQL correspondant

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    responsable d'équipe
    Inscrit en
    Avril 2014
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : responsable d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 212
    Points : 0
    Points
    0
    Par défaut
    J ai pas compris

  17. #17
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu sais réaliser une requête dans Access à l'aide de l'assistant?
    Après construction tu auras le SQL.

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

Discussions similaires

  1. Problème avec requête SQL avec variables
    Par harry25 dans le forum ASP
    Réponses: 1
    Dernier message: 03/01/2007, 04h41
  2. VBA avec requête SQL
    Par seba_stien dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 17/10/2006, 16h39
  3. [JDBC]probleme avec requête sql
    Par lkryss dans le forum JDBC
    Réponses: 16
    Dernier message: 10/06/2006, 02h44
  4. [MySQL] requête SQL MAX puis récupération de la valeur
    Par zulot dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/02/2006, 15h17
  5. [MySQL] Problème de listes déroulantes liées avec requêtes sql
    Par richton95 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/12/2005, 17h04

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