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 :

Erreur Either BOF or EOF [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    Bonjour à tous,

    pour mon stage d'IUT en 2eme année, je dois faire quelques manipulations sur une base de données Oracle et lier tout ça à un fichier excel. Jusque là tout aller bien, mais je bloque sur une ligne de code depuis un moment donc j'aimerai un coup de main. Voici mon code:

    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
    Sub MAJ_vehicul()
    
    '----DECLARTION DES VARIABLES----
    Dim Connect As New ADODB.Connection
    
    Dim l As Integer
    l = 2
    
    
    Dim Sql_Immat As String
    Dim Result_Immat As ADODB.Recordset
    
    
    '----CONNEXION A LA BASE DE DONNEES----
    Connect.Open (crypté)
    
    ''----PARTIE REQUETES----
    While Not IsEmpty(Range("B" & l))
    
    '--Immatriculation
    Sql_Immat = "SELECT BOX.TXT_USERINFO FROM S03.BOX WHERE BOX.CD_BOX = '" & Range("B" & l).Value & "'"
    Set Result_Immat = Connect.Execute(Sql_Immat)
    If Result_Immat.Fields(0).Value <> Range("A" & l).Value Then MsgBox "nulle!!"
    
    
    l = l + 1
    Wend
    
    End Sub
    ---
    Lorsque j'ai executé des reqûetes comme celle-ci, tout marchait bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ''--Arborescence
    'Sql_Arb = "SELECT BOX.TYP_LNKSUBTYPE FROM S03.BOX WHERE BOX.CD_BOX = '" & Range("G" & i).Value & "'"
    'Set Result_Arb = Connect.Execute(Sql_Arb)
    'If Result_Arb.Fields(0).Value = "0" Then Range("J" & i).Value = "PRODUCTION" Else If Result_Arb.Fields(0).Value = "1" Then Range("J" & i).Value = "TYPE EQUIPEMENT" Else Range("J" & i).Value = "AUTRE"
    Donc je ne comprends pas l'erreur de mon code...

    Message d'erreur : Erreur d'execution '3021'.
    Either BOF or EOF is True, or the current record has been deleted. Request...


    Quelqu'un peut m'aider s'il vous plait ?

    Merci beaucoup !

    Apparemment, ça vient du fait que certaines données dans la base de données sont vides et du coup la recordset est null. Mais comment faire un IF sur "Result_Immat.Fields(0).Value" = null alors... ? j'ai essayé pas mal de truc genre isnull, isempty, len... mais j'ai pas trouvé la bonne formule quelqu'un pourrait m'aider ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour.

    Tester avec .Value = ""


    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    Merci de votre réponse, mais j'avais essayé ça ne fonctionne pas...
    Que puis-je faire ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Si une requête ne retourne aucune occurrence, EOF et BOF sont a true.
    Je pense que tester l’EOF ne serait pas un luxe !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Result_Immat.EOF = false Then
        If "" & Result_Immat.Fields(0).Value <> Range("A" & l).Value Then MsgBox "nulle!!"
    End If

  5. #5
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    Merci bien !

    Ca à marché, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    If Result_Immat.EOF = True Then
    ...
     
    ElseIf Replace("" & Result_Immat.Fields(0).Value, " ", "") = Range("A" & l).Value Then
     ...
     
    Else:
     ...
     
    End If

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

Discussions similaires

  1. [AC-2007] Erreur 3021 : BOF ou EOF = True sur un recordset
    Par syntax_error dans le forum VBA Access
    Réponses: 4
    Dernier message: 03/02/2011, 16h27
  2. Erreur 3021 BOF/EOF sur un recordset.MoveNext
    Par greg360 dans le forum VBA Access
    Réponses: 2
    Dernier message: 31/08/2010, 17h34
  3. Réponses: 5
    Dernier message: 16/08/2006, 11h33
  4. ADO : Either BOF or EOF is true ... sous Delphi 7 !
    Par seb83 dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2005, 14h31
  5. ADO et 'Either BOF or EOF is True ...'
    Par exe dans le forum Bases de données
    Réponses: 3
    Dernier message: 18/05/2004, 13h07

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