Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/07/2011, 12h14   #1
Membre habitué
 
Homme Mathieu R
Etudiant MIAGe
Inscription : février 2010
Messages : 145
Détails du profil
Informations personnelles :
Nom : Homme Mathieu R
Âge : 22
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Etudiant MIAGe
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2010
Messages : 145
Points : 141
Points : 141
Par défaut Optimisation de VBA pour la recherche de valeurs dans une table

Bonjour à tous,

Voila j'ai mon code VBA qui m'importe des données Excel vers ma BDD Access.
J'ai différents tests de ce code qui se base sur une boucle.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Set rs = db.OpenRecordset("Equipment", dbOpenDynaset)
    With rs
        If .RecordCount <> 0 Then
            .MoveFirst
            trouve = False
            TrouveStatut = False
            Do While Not .EOF And Not trouve
'If the fields IDEQUIPMENT = Cells(ID) in Excel File
                If .Fields("IDEQUIPMENT") = Cells(i, ID) Then
                    trouve = True
                    IdEqOld = .Fields("IDEQUIPMENT")
'Use this conditions to see if the equipment statut is achieved or not
                    If .Fields("Statut") = "X" Then
                        TrouveStatut = True
                    Else
                        TrouveStatut = False
                    End If
                End If
                .MoveNext
            Loop
        End If
    End With
Cependant j'aimerai savoir si il y a une autre solution pour parcourir et récupéré ces valeurs.
En effet, avec la taille des fichiers Excel et le nombre d'enregistrements de la table "Equipment", il me faut presque 30min d'éxécution.

Merci d'avance
__________________
Qui ne tente rien, ne tente rien !
Tydher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 15h47   #2
Membre du Club
 
Homme Pierrick
Étudiant
Inscription : avril 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Homme Pierrick
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : avril 2011
Messages : 57
Points : 45
Points : 45
Hello! As-tu entendu parler de "recherche dichotomique"?
Voici un lien qui en parle: http://www.developpez.com/recherche/...eloppez.com%2F
koluche est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/07/2011, 16h49   #3
Membre habitué
 
Homme Mathieu R
Etudiant MIAGe
Inscription : février 2010
Messages : 145
Détails du profil
Informations personnelles :
Nom : Homme Mathieu R
Âge : 22
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Etudiant MIAGe
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2010
Messages : 145
Points : 141
Points : 141
Oui justement j'étais en train de me poser la question quand j'ai posté ici.
Merci pour les liens, je reposterai demain dans la matinée pour dire ce que j'ai fait !

Merci
__________________
Qui ne tente rien, ne tente rien !
Tydher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 04h19   #4
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 617
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 617
Points : 30 959
Points : 30 959
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Pourquoi ne pas passer par une requête au lieu de parcourir la table Equipement

Le critère (Clause Where de la requête) sera la valeur de la cellule (Cells(i, ID)) ainsi que les données du champ Statut.

Ce serait beaucoup plus rapide (à moins que je n'ai pas compris ce que tu souhaites).

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/07/2011, 08h40   #5
Membre habitué
 
Homme Mathieu R
Etudiant MIAGe
Inscription : février 2010
Messages : 145
Détails du profil
Informations personnelles :
Nom : Homme Mathieu R
Âge : 22
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Etudiant MIAGe
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2010
Messages : 145
Points : 141
Points : 141
Citation:
Envoyé par Philippe JOCHMANS Voir le message
Bonjour

Pourquoi ne pas passer par une requête au lieu de parcourir la table Equipement

Le critère (Clause Where de la requête) sera la valeur de la cellule (Cells(i, ID)) ainsi que les données du champ Statut.

Ce serait beaucoup plus rapide (à moins que je n'ai pas compris ce que tu souhaites).

Philippe
Si tu as bien compris, c'est vrai que je ne sais pas pourquoi je n'ai pas utilisé de requete SQL pour recherché une valeur. Je test cela et je repost un message.
__________________
Qui ne tente rien, ne tente rien !
Tydher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 09h17   #6
Membre habitué
 
Homme Mathieu R
Etudiant MIAGe
Inscription : février 2010
Messages : 145
Détails du profil
Informations personnelles :
Nom : Homme Mathieu R
Âge : 22
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Etudiant MIAGe
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2010
Messages : 145
Points : 141
Points : 141
Bon j'ai testé mon code avec la recherche dichotomique du lien envoyé par Koluche (et adapté à ma situation), et l'utilisation de requete SQL proposé par Phillipe.

Cette derniere est un peu plus rapide dans mon cas.
Voila ce que ça me donne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
Trouve = False
TrouveStatut = False
RechercheEq = ("Select Equipment.IDEQUIPMENT, Equipment.Statut From Equipment where Equipment.IDEQUIPMENT = '" & safeString(IdEq) & "'")
Set RechercheE = CurrentDb.OpenRecordset(RechercheEq)
If Not RechercheE.EOF Then
  RecEq = RechercheE.Fields("IDEQUIPMENT").Value
  RecStatut = RechercheE.Fields("Statut").Value
  If RecEq <> "" Then
    Trouve = True
  End If
  If RecStatut <> "" Then
    TrouveStatut = True
    IdEqOld = RecEq
  End If
Else
  Trouve = False
  TrouveStatut = False
End If
Merci beaucoup pour vos réponses.
__________________
Qui ne tente rien, ne tente rien !
Tydher est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h31.


 
 
 
 
Partenaires

Hébergement Web