Erreur 3251 avec AbolutePosition

Résolu
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 - 28 déc. 2019 à 11:34
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 29 déc. 2019 à 09:25
Bonjour,

Mon problème est simple à expliquer. Pour tester l'utilisation d'AbsolutePosition sur un RecordSet, je code le texte suivant :
Set tb = db.OpenRecordset("mots")
tb.MoveFirst
MsgBox tb.AbsolutePosition

Je reçois alors une erreur 3251 sur la commande Msgbox :



Pourquoi cette erreur et comment ne plus l'avoir ?

Merci de votre aide à venir

Notpa

6 réponses

Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
28 déc. 2019 à 14:46
Ne cherchez pas. J'ai trouvé l'erreur. La table était initialement ouverte avec une instruction SQL (Set tb = db.OpenRecordset("SELECT * FROM mots ORDER BY mots") dans laquelle je récupérais la position d'un enreg. via AbsolutePosition, et la table était fernée (tb.Close). Là, ça marche. Mais plus loin dans le code je ré-ouvrais cette table de façon standard (Set tb = db.OpenRecordset("mots") et recherchais l'enreg. via AbsolutePosition. Et là, ça coince : c'est normal le dynaset créé n'est pas le même.

En ne fermant pas la table, tout fonctionne comme je le veux. Problème résolu.

Et tous mes vœux pour 2020 !

Notpa
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
28 déc. 2019 à 14:50
Bonjour Notpa

Bientôt un an que tu es inscrit et un an que tu ne fais pas l’effort de rendre ton code facile/agréable à lire pour celui ou celle qui pourrait avoir envie de t’aider.
Je te rappelle que celui qui répond est bénévole, et que couleurs et indentations peuvent l’inciter un peu plus à regarder ton problème qu’un pavé tout gris.

Je te remets, une fois de plus le lien vers le petit tuto, des fois que...
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
28 déc. 2019 à 15:08
Désolé. Afin d'expliquer plus clairement la raison du problème dans le but d'aider ceux qui auraient éventuellement le même problème, je met une partie du code incriminé :

With frm_prim.grille
Set tb = db.OpenRecordset("SELECT * FROM mots ORDER BY mots")
If tb.RecordCount = 0 Then Exit Sub
tb.MoveFirst
r = 0
c = 0
.Clear
.Rows = 1
Do Until tb.EOF
If Trim(tb("mots")) = "" Then GoTo suivant:
If .Text = "" Then
.Col = 0
.Text = tb("mots")
.Text = Trim(.Text)
.Col = 1
.Text = tb.AbsolutePosition
.Rows = .Rows + 1
.Row = .Row + 1
End If
suivant:
tb.MoveNext
Loop
End With
tb.Close ' --> 1
....
Set tb = db.OpenRecordset("mots") ' --> 2
tb.AbsolutePosition = Val(grille.Text)
tb.Edit
tb("mots") = zone_modif
tb.Update
tb.Close ' --> 3


Le fait de fermer la table ( --> 1 ) et de la ré-ouvrir en mode standard (--> 2), le dynaset n'est plus le même, d'où l'erreur. En supprimant des point 1, 2 et 3, le problème n'existe plus.

Voilà. J'ai pris note de tes remarques, et tous mes vœux 2020 !
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
29 déc. 2019 à 01:00
Regarde ceci
With frm_prim.grille
Set tb = db.OpenRecordset("SELECT * FROM mots ORDER BY mots")
If tb.RecordCount = 0 Then Exit Sub
tb.MoveFirst
r = 0
c = 0
.Clear
.Rows = 1
Do Until tb.EOF
    If Trim(tb("mots")) = "" Then GoTo suivant:
    If .Text = "" Then
        .Col = 0
        .Text = tb("mots")
        .Text = Trim(.Text)
        .Col = 1
        .Text = tb.AbsolutePosition
        .Rows = .Rows + 1
        .Row = .Row + 1
    End If
suivant:
    tb.MoveNext
Loop
End With
tb.Close           '  --> 1
.... 
Set tb = db.OpenRecordset("mots")                  '  --> 2
    tb.AbsolutePosition = Val(grille.Text)
    tb.Edit
    tb("mots") = zone_modif
    tb.Update
    tb.Close                    '  --> 3

Et compare avec ton message.
Dans ma « version » il y a de la couleur, les numéros de lignes, un ascenseur vertical (et horizontal quand c’est nécessaire).
C’est expliqué dans le petit tuto que je t’ai mis en lien comment afficher de cette façon.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
29 déc. 2019 à 08:40
OK. J'avais sélectionné Code (<>) mais pas Basic (▼). C'est fait :

With frm_prim.grille
Set tb = db.OpenRecordset("SELECT * FROM mots ORDER BY mots")
If tb.RecordCount = 0 Then Exit Sub
tb.MoveFirst
r = 0
c = 0
.Clear
.Rows = 1
Do Until tb.EOF
    If Trim(tb("mots")) = "" Then GoTo suivant:
    If .Text = "" Then
        .Col = 0
        .Text = tb("mots")
        .Text = Trim(.Text)
        .Col = 1
        .Text = tb.AbsolutePosition
        .Rows = .Rows + 1
        .Row = .Row + 1
    End If
suivant:
    tb.MoveNext
Loop
End With
tb.Close           '  --> 1
.... 
Set tb = db.OpenRecordset("mots")                  '  --> 2
    tb.AbsolutePosition = Val(grille.Text)
    tb.Edit
    tb("mots") = zone_modif
    tb.Update
    tb.Close                    '  --> 3


Bon dimanche

Notpa
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
29 déc. 2019 à 09:25
Bon dimanche et bonne année 2020
0
Rejoignez-nous