boucler sur les enregistrements d'un recordset

Calimero33

XLDnaute Nouveau
Bonjour,

je souhaite comparer une liste de données d'un fichier source avec ceux de la feuille active et afficher dans une nouvelle feuille ou dans une fenêtre la liste des enregistrements qui ne sont présents dans mon fichier source et absent de ma feuille active.
Je me suis connecté avec ADO à mon fichier source et j'ai un recordset qui contient la liste des enregistrements sources (1 champs). Je dois maintenant les comparer à la liste de ma feuille active.
Comment faire une boucle qui stocke dans une variable enregistrement1 du recordset, puis le 2, le 3 ... jusqu'au dernier enregistrement ? Ma variable recordset s'appelle Rst

Dim Var As String
Pour chaque enregistrement de mon recordset
Var = Rst.fields(0) // comment avancer dans mon recordset pour passer à l'enregistrement suivant ?
 

Calimero33

XLDnaute Nouveau
Re : boucler sur les enregistrements d'un recordset

Merci pour l'idée !
J'ai créé un tableau virtuel comme tu me l'a suggéré et maintenant je voudrais acceder a ses elements, le probleme c'est qu'à chaque fois que j'essaye j'ai un message d'erreur "L'indice n'appartient pas à la selection" , il me refuse le t(J). J'ai essaye t(1) mais même ca il en veut pas :(

Dim t() As Variant
t = Application.Transpose(Rst.GetRows)

Dim J As Integer
For J = LBound(t) To UBound(t)
Sheets("AAJOUTER").Range("A" & J) = t(J)
 
G

Guest

Guest
Re : boucler sur les enregistrements d'un recordset

Bonjour calimero,

Re Pierrot:) (on arrête pas aujourd'hui)

Bouclage sur un recordset ADODB:


Code:
rst.MoveFirst
Do While Not rst.EOF()
    Var = rst.Fields(0) ' ou rst(0)
    rst.MoveNext
Loop

A+
 

fhoest

XLDnaute Accro
Re : boucler sur les enregistrements d'un recordset

Bonjour a vous deux,TROIS
j'ai deja eut un problème similaire et le problème ne venait pas du code mais de la façons dont on le lancer
(si directement marche pas - si passe par le début de l'application normalement étape par étape cela fonctionner) pour mon cas bien sur
c'est juste a titre d'information
A+
 
G

Guest

Guest
Re : boucler sur les enregistrements d'un recordset

Bonjour fhoest,

Bonjour a vous deux,
j'ai deja eut un problème similaire et le problème ne venait pas du code mais de la façons dont on le lancer
(si directement marche pas - si passe par le début de l'application normalement étape par étape cela fonctionner) pour mon cas bien sur
c'est juste a titre d'information
A+

Pas suffisament explicite pour comprendre de quoi tu parles.

A+
 

fhoest

XLDnaute Accro
Re : boucler sur les enregistrements d'un recordset

bonjour Hasco
je parle de son erreur indice...
en fait j'ai utilisé ce code
Code:
Dim J As Integer
For J = LBound(t) To UBound(t)
qui été placé dans un module,si je demarre le code a l'aide de la touche F8 j'avais de temps a autre une erreur d'indice,
mais lorsque je demarrer par le debut de mon programme (lancement du usf puis ... puis l'action qui fesait appel a ce module je n'avais pas d'erreur d'indice)
j'espère etre plus clair.
A+
 

quezaco

XLDnaute Occasionnel
transposition matrice

Bonjour au forum,

Etant nouvel arrivant, je me permet de faire appel à vos lumieres.

J'ai un tableau excel carré avec en partie gauche des données et je souhaite les transposer par le biais d'une macro qui maintiendrait le lien avec les données d'origine.
Ci-joint mon petit tableau (qui va s'étendre) avec la macro en question qui peut être simplifiée?
Merci de vos réponses
 
Dernière édition:
G

Guest

Guest
Re : boucler sur les enregistrements d'un recordset

Bonjour Quezaco, bienvenue sur le forum

Je t'invite à créer ton propre fil et sur ta lancée à aller consulter la chartre du forum.

A très bientôt
 

Calimero33

XLDnaute Nouveau
Re : boucler sur les enregistrements d'un recordset

Merci pour le code, ca marche nikel Hasco !!
Maintenant j'ai deux liste de données de 120 enregistrement, l'un est stocké dans une colonne d'un tableau ( pas sur toutes les lignes, je fais un test pour savoir si c'est bien l'enregistrement que je veux ) et l'autre est dans un recordset trié dans l'ordre croissant, je veux connaitre les enregsitrement qui sont dans mon recordset mais pas dans mon tableau , j'ai essayé en faisant :
Rst.MoveFirst

Do Until Rst.EOF = True

Var = Rst.Fields(0)
test = 0
For I = 14 To NbLigne

Centre = Range("C" & I).Value
If (Len(Centre) = 6) Then
If (Var = Centre) Then
test = 1
End If
End If
Next
If (test = 0) Then
Sheets("AAJOUTER").Range("A" & I) = Var
I = I + 1
Rst.MoveNext
End If
Loop

ca demande trop de temps , ca marche pas il va falloir que je trouve un moyen d'optimiser ma comparaison.
 
G

Guest

Guest
Re : boucler sur les enregistrements d'un recordset

Re,

Je crains que ton exemple soit trop partiel et succint pour que je puissent t'aider efficacement.

Il semble que pour chaque valeur de rst.field(0) tu parcours toutes tes lignes. Tu pourrais faire appel à

Code:
If  IsError(Application.Match(Var, taPlageDeRecherche,0)) Then
    'J'ajoute la valeur là où il faut
End if
Application.Match est l'équivalent VBA de la fonction EQUIV de feuille de calcul.

On peut imaginer aussi Mettre toutes les valeurs contenus dans Rst dans ta feuille "AAJOUTER"
Ensuite tu cherches les doublons et tu les enlèves.

Sinon tu as une possibilités de mettre les valeurs de Rst en tableau

Code:
Dim Vars
Vars=rst.GetRows()
Parcourir un tableau est plus rapide.

A+

A+
 
Dernière modification par un modérateur:

Calimero33

XLDnaute Nouveau
Re : boucler sur les enregistrements d'un recordset

J'ai opté pour la solution de copier les deux listes à la suite dans une colonne de la feuille aajouter, en supprimant les doublons je trouver les différences entre mes deux listes. Le problème est que je n'arrive à supprimer qu'un doublons et pas les doubles.
 

Discussions similaires

Statistiques des forums

Discussions
312 497
Messages
2 088 994
Membres
104 000
dernier inscrit
dinelcia