Changement de ligne dans une base de donnée [Résolu]

Signaler
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006
-
Messages postés
165
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
24 avril 2018
-
Bonjour j'auris voulu savoir comment faire pour afficher les champs de ma base de donnée dans différents TextBox et donc ce qui me pose problème le changement de ligne !!

J'ais le code suivant pour afficher mes champ mais je ne trouve pas le moyen de changer de ligne !!
Merci d'avance.
Command1 est un bouton qui ferrra défiller les différentes valeurs de chaque ligne
dans les TextBox correspondant :

Private Sub Command1_Click()
Dim last As Integer
tb.Open "SELECT * FROM CompteurRebuts ", bd, adOpenDynamic, adLockOptimistic
If Not tb.EOF Then
  Text4.Text = tb.Fields!Date
  Text5.Text = tb.Fields!NumOf
  Text6.Text = Format((tb.Fields!Compteur), "# ##0")
  Text7.Text = tb.Fields!Format
End If
tb.Close
End Sub

20 réponses

Messages postés
165
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
24 avril 2018

Oui parce  que ni dans le Form_Laod et la Fonction 'Charger' tu as déclaré tb   (tb.Open "SELECT ............)
Evite d'ouvrir différentes tables (en alternance) avec le même nom de variable (risque de se tromper !!!)

Il y a deux écoles:

1) Soit on met tout dans une seule et même table.

Avantage:  moins contraignant d'accès aux données
Inconvénient:  si erreur dans BDD => Plantage Total

2) Soit on réparti de manière logique les informations dans plusieurs tables.

Avantage: Plantage Patiel en cas d'erreur dans la BDD
Inconvénient: Il faut tout déclarer (les tables) auparavant afin de réduire les temps d'accès aux données, et on doit 'jongler' avec les RecordSet.

Personnellement, j'utilise les deux méthodes en fonction du logiciel qu'on me demande de réaliser. (avec une préférence pour la 2ème)

Exemple  (partiel et minimaliste) d'un de mes codes :
Logiciel de gestion d'entreprise (articles, fournisseurs, clients, rayons, taxes, commandes, devis, facturations, inventaires, caisse comptoir, caisse clients en compte, etc... etc... etc ...



Option Explicit
Dim DB As Database
Dim ra As Recordset
Dim ra2 As Recordset
Dim ra3 As Recordset
Dim ra4 As Recordset
Dim rartfou As Recordset
Dim rarech As Recordset
Dim rmsf2artd1fou As Recordset
Dim re As Recordset
Dim rf As Recordset
Dim rfactif As Recordset
Dim rgcd As Recordset
Dim rpc As Recordset
Dim rt As Recordset
Dim rr As Recordset




-----------------------
Private Sub Form_Load()

'déclaration de la BDD et des Tables'
Set DB = OpenDatabase("C:\Program Files\Rfdc\Logémag2006\Logémag2006.mdb")
Set ra = DB.OpenRecordset("Articles", dbOpenDynaset)
Set ra2 = DB.OpenRecordset("Articles", dbOpenDynaset)
Set ra3 = DB.OpenRecordset("Articles", dbOpenDynaset)
Set ra4 = DB.OpenRecordset("Articles", dbOpenDynaset)
Set rmsf2artd1fou = DB.OpenRecordset("msf2artd1fou", dbOpenDynaset)
Set re = DB.OpenRecordset("Etiquettes", dbOpenDynaset)
Set rf = DB.OpenRecordset("Fournisseurs", dbOpenDynaset)
Set rfactif = DB.OpenRecordset( _
        "SELECT code, nom " & _
        "FROM Fournisseurs where st='ACTIF' order by code ", _
        dbOpenDynaset)



Set rgcd = DB.OpenRecordset("Gencod", dbOpenDynaset)
Set rpc = DB.OpenRecordset("plancompta", dbOpenDynaset)
Set rr = DB.OpenRecordset("Rayons", dbOpenDynaset)
Set rt = DB.OpenRecordset("Taxes", dbOpenDynaset)



'affichage à l'ouverture du 1er enregistrement au statut "ACTIF"'

ra.FindFirst "st= 'ACTIF'"



code = ra!code
code2 = ra!code
gencod1 = ra!gencod1
stock1 = ra!stock1
stock2 = ra!stock2
stock3 = ra!stock3
désignation = ra!désignation
désignation2 = ra!désignation
patar = ra!patar
rem1 = ra!rem1
rem2 = ra!rem2
rem3 = ra!rem3
panet = ra!panet
coeff = ra!coeff
pvttc = ra!pvttc
réf = ra!réf
réf2 = ra!réf
marq = ra!marq
pamp = ra!pamp
gencod2 = ra!gencod2
gencod3 = ra!gencod3
col = ra!col
tva = ra!tva
gcdmulti.Value = Val(ra!gcdmulti)
gstock.Value = Val(ra!gstock)
smini = ra!smini
amini = ra!amini
ulégale = ra!ulégale
uvente = ra!uvente
asuppr.Value = ra!asuppr
broch = ra!broch
saison = ra!saison
cdlié1 = ra!cdlié1
qliée1 = ra!qliée1
cdlié2 = ra!cdlié2
qliée2 = ra!qliée2
dtcréa = ra!dtcréa
dtdernach = ra!dtdernach
dtdernvente = ra!dtdernvente
dtderninv = ra!dtderninv
qinv = ra!qinv
écartstinv = ra!écartstinv
taxsupfix = ra!taxsupfix
txts = ra!txts
valtva = ra!valtva
valts = ra!valts
txmarg = ra!txmarg
valmarg = ra!valmarg
arrondi = ra!arrondi
pvmp = ra!pvmp
pxpromo = ra!pxpromo
débpromo = ra!débpromo
finpromo = ra!finpromo
cdf = ra!cdf
nmf = ra!nmf
cdr = ra!cdr
nmr = ra!nmr
qcom = ra!qcom
st = ra!st
Ach01p = ra!Ach01p
Ach01 = ra!Ach01
Ach02p = ra!Ach02p
Ach02 = ra!Ach02
Ach03p = ra!Ach03p
Ach03 = ra!Ach03
Ach04p = ra!Ach04p
Ach04 = ra!Ach04
Ach05p = ra!Ach05p
Ach05 = ra!Ach05
Ach06p = ra!Ach06p
Ach06 = ra!Ach06
Ach07p = ra!Ach07p
Ach07 = ra!Ach07
Ach08p = ra!Ach08p
Ach08 = ra!Ach08
Ach09p = ra!Ach09p
Ach09 = ra!Ach09
Ach10p = ra!Ach10p
Ach10 = ra!Ach10
Ach11p = ra!Ach11p
Ach11 = ra!Ach11
Ach12p = ra!Ach12p
Ach12 = ra!Ach12
TotAchp = ra!TotAchp
TotAch = ra!TotAch
Ven01p = ra!Ven01p
Ven01 = ra!Ven01
Ven02p = ra!Ven02p
Ven02 = ra!Ven02
Ven03p = ra!Ven03p
Ven03 = ra!Ven03
Ven04p = ra!Ven04p
Ven04 = ra!Ven04
Ven05p = ra!Ven05p
Ven05 = ra!Ven05
Ven06p = ra!Ven06p
Ven06 = ra!Ven06
Ven07p = ra!Ven07p
Ven07 = ra!Ven07
Ven08p = ra!Ven08p
Ven08 = ra!Ven08
Ven09p = ra!Ven09p
Ven09 = ra!Ven09
Ven10p = ra!Ven10p
Ven10 = ra!Ven10
Ven11p = ra!Ven11p
Ven11 = ra!Ven11
Ven12p = ra!Ven12p
Ven12 = ra!Ven12
TotVenp = ra!TotVenp
TotVen = ra!TotVen
notes = ra!notes
compta = ra!compta

End Sub
---------------

Private Sub suiv_Click()

ra.FindNext "st= 'ACTIF'"
If ra.NoMatch = True Then GoTo attente



noap = ra.AbsolutePosition
code = ra!code
code2 = ra!code
gencod1 = ra!gencod1
stock1 = ra!stock1
stock2 = ra!stock2
stock3 = ra!stock3
désignation = ra!désignation
désignation2 = ra!désignation
patar = ra!patar
rem1 = ra!rem1
rem2 = ra!rem2
rem3 = ra!rem3
panet = ra!panet
coeff = ra!coeff
pvttc = ra!pvttc
réf = ra!réf
réf2 = ra!réf
marq = ra!marq
pamp = ra!pamp
gencod2 = ra!gencod2
gencod3 = ra!gencod3
col = ra!col
tva = ra!tva
gcdmulti.Value = Val(ra!gcdmulti)
gstock.Value = Val(ra!gstock)
smini = ra!smini
amini = ra!amini
ulégale = ra!ulégale
uvente = ra!uvente
asuppr.Value = ra!asuppr
broch = ra!broch
saison = ra!saison
cdlié1 = ra!cdlié1
qliée1 = ra!qliée1
cdlié2 = ra!cdlié2
qliée2 = ra!qliée2
dtcréa = ra!dtcréa
dtdernach = ra!dtdernach
dtdernvente = ra!dtdernvente
dtderninv = ra!dtderninv
qinv = ra!qinv
écartstinv = ra!écartstinv
taxsupfix = ra!taxsupfix
txts = ra!txts
valtva = ra!valtva
valts = ra!valts
txmarg = ra!txmarg
valmarg = ra!valmarg
arrondi = ra!arrondi
pvmp = ra!pvmp
pxpromo = ra!pxpromo
débpromo = ra!débpromo
finpromo = ra!finpromo
cdf = ra!cdf
nmf = ra!nmf
cdr = ra!cdr
nmr = ra!nmr
qcom = ra!qcom
st = ra!st
Ach01p = ra!Ach01p
Ach01 = ra!Ach01
Ach02p = ra!Ach02p
Ach02 = ra!Ach02
Ach03p = ra!Ach03p
Ach03 = ra!Ach03
Ach04p = ra!Ach04p
Ach04 = ra!Ach04
Ach05p = ra!Ach05p
Ach05 = ra!Ach05
Ach06p = ra!Ach06p
Ach06 = ra!Ach06
Ach07p = ra!Ach07p
Ach07 = ra!Ach07
Ach08p = ra!Ach08p
Ach08 = ra!Ach08
Ach09p = ra!Ach09p
Ach09 = ra!Ach09
Ach10p = ra!Ach10p
Ach10 = ra!Ach10
Ach11p = ra!Ach11p
Ach11 = ra!Ach11
Ach12p = ra!Ach12p
Ach12 = ra!Ach12
TotAchp = ra!TotAchp
TotAch = ra!TotAch
Ven01p = ra!Ven01p
Ven01 = ra!Ven01
Ven02p = ra!Ven02p
Ven02 = ra!Ven02
Ven03p = ra!Ven03p
Ven03 = ra!Ven03
Ven04p = ra!Ven04p
Ven04 = ra!Ven04
Ven05p = ra!Ven05p
Ven05 = ra!Ven05
Ven06p = ra!Ven06p
Ven06 = ra!Ven06
Ven07p = ra!Ven07p
Ven07 = ra!Ven07
Ven08p = ra!Ven08p
Ven08 = ra!Ven08
Ven09p = ra!Ven09p
Ven09 = ra!Ven09
Ven10p = ra!Ven10p
Ven10 = ra!Ven10
Ven11p = ra!Ven11p
Ven11 = ra!Ven11
Ven12p = ra!Ven12p
Ven12 = ra!Ven12
TotVenp = ra!TotVenp
TotVen = ra!TotVen
notes = ra!notes
compta = ra!compta



attente:
End Sub


C'est sûr !!   C'est beaucoup plus contraignant qu'avec la méthode de déclaration de dépendance des objets via un controle data ou un ADO data control, mais c'est Béton !!!   et c'est comme tout,
"la méthode la meilleur, c'est celle qui te plait le mieux !!!"

Parfois il faut se forcer à faire une refonte complète d'un programme, pour avancer d'un grand pas vers l'efficacité !!
  

Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
Messages postés
228
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
4 janvier 2008
1
tb.movenext '
pour passer à la ligne suivante










Deluka.
Messages postés
165
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
24 avril 2018

Ok !!
Il te faut d'abord organiser tout cela de manière correcte:

si tu écris çà comme il est actuellement, cela revient à ouvrir de manière ponctuelle, une Table de ta Base de Données, afficher le 1er enregistrement, puis la fermer (ce qui revient à la décharger), donc tu ne peux pas aller à d'autres enregistrements comme çà !!!
Donc pas de 'tb.Close' sauf si tu veux la recharger de nouveau après de multiples modifications !!!

je te conseille d'écrire ton code de cette manière:

tout en haut de ta page de code:

Option Explicit
Dim last As Integer
 
ensuite dans le Form Load:

Private Sub Form_Load()
tb.Open "SELECT * FROM CompteurRebuts ", bd, adOpenDynamic, adLockOptimistic
If Not tb.EOF Then
  Text4.Text = tb.Fields!Date
  Text5.Text = tb.Fields!NumOf
  Text6.Text = Format((tb.Fields!Compteur), "# ##0")
  Text7.Text = tb.Fields!Format
End If

End Sub

puis sur un CommandButton appelé 'Suivant'

Private Sub Suivant_Click()
tb.MoveNext
If Not tb.EOF Then
  Text4.Text = tb.Fields!Date
  Text5.Text = tb.Fields!NumOf
  Text6.Text = Format((tb.Fields!Compteur), "# ##0")
  Text7.Text = tb.Fields!Format
End If
End Sub

et enfin sur unCommandButton appelé 'Précédent'

Private Sub Précédent_Click()
tb.MovePrevious
If Not tb.EOF Then
  Text4.Text = tb.Fields!Date
  Text5.Text = tb.Fields!NumOf
  Text6.Text = Format((tb.Fields!Compteur), "# ##0")
  Text7.Text = tb.Fields!Format
End If
End Sub

Perso je ne l'ai pas essayé, mais normalement, çà marche !!!
à toi de tester ce code, et à mettre les 'barrières' au cas où il n'y aurait pas d'enregistrement précédent (avant le 1er Error), et au cas où il n'y aurait pas de suivant non plus (après le dernier Error).

Voilà !!!  En cas de soucis n'hésite pas !! Si je sais, je t'aiderai !!!

Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
Messages postés
168
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
11 septembre 2007

Merci beaucoup je regarderai ca demain matin au taff mais ca m'a pas l'ai faux donc je te remierci et te recontact surement demain dans la matin et l'aprèm !!


++
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

bon si je mets le code tel qu'elle je me retrouve avec une erreur qui me dis que :
"Cette opération n'est pas autorisée si l'objet est fermet"

Je pense que cela vient du fait que dans le code d'un autre boutton j'utilise un tb.close mais bon.......ceal voudrai dire qu'il faud que je vire dans cet autre boutton
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

le truck c'est que dans mon Form_Load() j'ais une fonction charger qui elle a un close à chaque foix qu'elle se termine, ce qui m'oblige à réouvrir lorsque je fait suivant ou précédant !!

Du coup lorsque j'écrir le code suivant :
Private Sub Command1_Click()
   tb.Open "SELECT * FROM CompteurRebuts ORDER BY Date ASC", bd, adOpenDynamic, adLockOptimistic
   tb.MovePrevious
   If tb.BOF = True Then
     tb.MoveLast
   End If
   Text4.Text = tb.Fields!Date
   Text5.Text = tb.Fields!NumOf
   Text6.Text = Format((tb.Fields!Compteur), "# ##0")
   Text7.Text = tb.Fields!Format
   tb.Close
End Sub

ca marche bien pour le dernier mais lorsque je reclique dessus forcément il répète les même aciton vue que j'ais fait un tb.Close, si je l'enlève au second click il me dis qu'il ne pe pas l'ouvrir si l'objet et déjà ouver comment je pe faire pour réglè ce pb !! MERCI
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

bon et bien apparament j'ais trouvé, j'ai utilisé "tb.State" pour l'ouverture et ca marche !!

Private Sub Command1_Click()
If Not tb.State = 1 Then
  tb.Open "SELECT * FROM CompteurRebuts ORDER BY Date ASC", bd, adOpenDynamic, adLockOptimistic
End If
tb.MovePrevious
If tb.BOF = True Then
  tb.MoveLast
End If
Text4.Text = tb.Fields!Date
Text5.Text = tb.Fields!NumOf
Text6.Text = Format((tb.Fields!Compteur), "# ##0")
Text7.Text = tb.Fields!Format
End Sub

Dans l'état actuel je parcour ma base de bas en haut et effectuant un rebouclage !!
et c'est le rebouclage que je ne ve pas !!
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

Voila comme ca ca marche nikel !!

Private Sub Command1_Click()
If Not tb.State = 1 Then
  tb.Open "SELECT * FROM CompteurRebuts ORDER BY Date ASC", bd, adOpenDynamic, adLockOptimistic
  If tb.BOF = False Then
    tb.MoveLast
  End If
End If
tb.MovePrevious
If tb.BOF = True Then
  MsgBox "Plus d'enregistrement précédant"
  Exit Sub
End If
Text4.Text = tb.Fields!Date
Text5.Text = tb.Fields!NumOf
Text6.Text = Format((tb.Fields!Compteur), "# ##0")
Text7.Text = tb.Fields!Format
End Sub
Messages postés
165
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
24 avril 2018

C'est simple, si tu ouvre une table (sans la refermer tout se suite après !!!) elle reste ouverte tant que tu n'ordonne pas de la fermer.

Donc un conseil, enlève tous les 'tb.Open "SELECT * FROM CompteurRebuts ORDER BY Date ASC", bd, adOpenDynamic, adLockOptimistic'et les'tb.Close' qui sont en dehors du Form_Load, en les recherchant grace à la paire de jumelle (Rechercher) qui se trouve dans la barre d'outils du haut de VB, et en tapant dans le Combo l'expression  à rechercher.
Je l'accorde, c'est un peu pénible, mais bien plus pratique, car supposons qu'un jour tu crées une BDD avec une Table contenant 'moulte et moulte' enregistrements, il te faudra plusieurs secondes (voir minutes !!!) pour la charger à chaque fois !!!
Tu imagines l'utilisateur final du logiciel en train d'attendre à chaque fois qu'il appuye sur une touche ????  (Pétage de Plombs !!! Non ?)

De plus la navigation et la modification en est plus que simplifiée !!

Je suis sûr à 99.99999999999 % que ton problème ne vient que de là !! (c'est toujours du 0.00000000001 %  qu'il faut ce méfier !!!)
 

Fais une copie de ton projet initial (par sécurité), et commence par ce que je viens de t'expliquer.

Rappel moi !!

Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

bon voila donc mon code pour les deux bouttons sont les suivant :
Pour le boutton précédant :
Private Sub Command1_Click()
If Not tb.State = 1 Then
  tb.Open "SELECT * FROM CompteurRebuts ORDER BY Date ASC", bd, adOpenDynamic, adLockOptimistic
  If tb.BOF = False Then
    tb.MoveLast
  End If
End If
If tb.BOF = True Then
  MsgBox "Plus d'enregistrement précédant"
  tb.Close
  Exit Sub
End If
Text4.Text = tb.Fields!Date
Text5.Text = tb.Fields!NumOf
Text6.Text = Format((tb.Fields!Compteur), "# ##0")
Text7.Text = tb.Fields!Format
tb.MovePrevious
End Sub

et pour le boutton suivant :
Private Sub Command3_Click()
If Not tb.State = 1 Then
  tb.Open "SELECT * FROM CompteurRebuts ORDER BY Date ASC", bd, adOpenDynamic, adLockOptimistic
  If tb.EOF = True Then
    tb.MoveFirst
  End If
End If
If tb.EOF = True Then
  MsgBox "Plus d'enregistrement précédant"
  tb.Close
  Exit Sub
End If
Text4.Text = tb.Fields!Date
Text5.Text = tb.Fields!NumOf
Text6.Text = Format((tb.Fields!Compteur), "# ##0")
Text7.Text = tb.Fields!Format
tb.MoveNext
End Sub

j'ais juste un piti sousis lorsque je passe d'un boutton a l'autre il faud que je click deux foix pour qu'une action soit visible !!
je sais aps si c'est claire dis comme ca !!
Enfin si ca intéresse quelq'un qui pe m'aider !! merci

ps : c'est une broutille lol
Messages postés
165
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
24 avril 2018

ton tb.MoveNext et ton tb.MovePrevious ne sont pas à la bonne place !!!

Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
Messages postés
165
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
24 avril 2018

essai çà !!

tb.MoveNext
Text4.Text = tb.Fields!Date
Text5.Text = tb.Fields!NumOf
Text6.Text = Format((tb.Fields!Compteur), "# ##0")
Text7.Text = tb.Fields!Format

Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

oki d'accord je vais voir ce que ca donne mais je ne suis vraiment pas sur que ca fonctionne.
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

Bon alors voila si ca ne te dérange pas je te donne le source de ma version en complet et celui aprés modif (saus les tb.colse et tb.Open ".....") ca ne marche pas pour si je le modifie comme tu me l'a dis et il me met une erreur dés l'appel de la fonction charger() : "Cette opération n'est pas autorisée si l'objet est fermet"

Sans Modif
Option Explicit
Dim bd As New ADODB.Connection
Dim tb As New ADODB.Recordset
Dim dateOLD As String
'Attente réponce pour changement de ligne
Private Sub Command1_Click()
If Not tb.State = 1 Then
  tb.Open "SELECT * FROM CompteurRebuts ORDER BY Date ASC", bd, adOpenDynamic, adLockOptimistic
  If tb.BOF = False Then
    tb.MoveLast
  End If
End If
If tb.BOF = True Then
  MsgBox "Plus d'enregistrement précédant"
  tb.Close
  Exit Sub
End If
Text4.Text = tb.Fields!Date
Text5.Text = tb.Fields!NumOf
Text6.Text = Format((tb.Fields!Compteur), "# ##0")
Text7.Text = tb.Fields!Format
tb.MovePrevious
End Sub


Private Sub Command2_Click()
tb.Open "SELECT Date FROM CompteurRebuts", bd, adOpenDynamic, adLockOptimistic
If Not tb.EOF Then
  If Text1.Text = tb!Date Then
  MsgBox "La date que vous avez saisi existe déjà"
  tb.Cancel
  Exit Sub
  End If
tb.Close
End If
tb.Open "SELECT * FROM CompteurRebuts", bd, adOpenDynamic, adLockOptimistic
tb.AddNew


If Text1.Text = "" Then        '# si non saisie
  MsgBox "Date incorrect"
  Exit Sub
End If
If Text2.Text = "" Then        '# si non saisie
    MsgBox "Numéro OF invalide"
    tb.Cancel
    Exit Sub
End If
If Text3.Text = "" Then        '# si non saisie
  MsgBox "Valeur incorrect"
  tb.Cancel
  Exit Sub
End If
If Combo1.Text = "" Then
  MsgBox "Format incorrect"
  tb.Cancel
  Exit Sub
End If
tb!Date = Text1.Text    '#écrire date
tb!NumOf = Text2.Text       '#écrire Of
tb!Compteur = Text3.Text    '# écrire valeur compteur
tb!Format = Combo1.Text


tb.Update


tb.Close


Set tb = Nothing


End Sub


Private Sub Command3_Click()
If Not tb.State = 1 Then
  tb.Open "SELECT * FROM CompteurRebuts ORDER BY Date ASC", bd, adOpenDynamic, adLockOptimistic
  If tb.EOF = True Then
    tb.MoveFirst
  End If
End If
If tb.EOF = True Then
  MsgBox "Plus d'enregistrement précédant"
  tb.Close
  Exit Sub
End If
Text4.Text = tb.Fields!Date
Text5.Text = tb.Fields!NumOf
Text6.Text = Format((tb.Fields!Compteur), "# ##0")
Text7.Text = tb.Fields!Format
tb.MoveNext
End Sub


Private Sub Command4_Click()
bd.Close
Set bd = Nothing
End
End Sub


Private Sub Form_Load()
Dim retCharger As String
'Connection Base de donnée
bd.Provider = "microsoft.jet.oledb.4.0"
bd.ConnectionString = "C:\Documents and Settings\CalderonN\Base de donnée\bdCompteurRebut1.mdb"
bd.Open
Call Charger
'Selection de la combobox1
Combo1.AddItem "Format 1", 0
Combo1.AddItem "Format 2", 1
Combo1.AddItem "Format 3", 2
Combo1.AddItem "Format 4", 3
Combo1.AddItem "Format 5", 4
End Sub
Private Sub Charger()
'Affichage des auciennes valeurs (les plus récentes)
'La date
  tb.Open "SELECT Max(Date) FROM CompteurRebuts", bd, adOpenDynamic, adLockOptimistic
  If Not tb.EOF Then
    Text4.Text = tb.Fields(0)
    dateOLD = Text4.Text
  End If
  tb.Close
'Le numéro OF
  tb.Open "SELECT NumOf FROM CompteurRebuts WHERE Date = " & Format$(dateOLD, "\#MM\/DD\/YYYY\#")
  If Not tb.EOF Then
    Text5.Text = tb.Fields!NumOf
  End If
  tb.Close
'La valeur du compteur
  tb.Open "SELECT Compteur FROM CompteurRebuts WHERE Date=" & Format$(dateOLD, "\#MM\/DD\/YYYY\#")
  If Not tb.EOF Then
    Text6.Text = Format((tb.Fields!Compteur), "# ##0")
  End If
  tb.Close
'Le format de boite
  tb.Open "SELECT Format FROM CompteurRebuts WHERE Date=" & Format$(dateOLD, "\#MM\/DD\/YYYY\#")
  If Not tb.EOF Then
    Text7.Text = tb.Fields!Format
  End If
  tb.Close
End Sub

Avec modif et erreur

Option Explicit
Dim bd As New ADODB.Connection
Dim tb As New ADODB.Recordset
Dim dateOLD As String
'Attente réponce pour changement de ligne
Private Sub Command1_Click()
  If tb.BOF = False Then
    tb.MoveLast
  End If
If tb.BOF = True Then
  MsgBox "Plus d'enregistrement précédant"
  Exit Sub
End If
Text4.Text = tb.Fields!Date
Text5.Text = tb.Fields!NumOf
Text6.Text = Format((tb.Fields!Compteur), "# ##0")
Text7.Text = tb.Fields!Format
tb.MovePrevious
End Sub


Private Sub Command2_Click()
If Not tb.EOF Then
  If Text1.Text = tb!Date Then
  MsgBox "La date que vous avez saisi existe déjà"
  tb.Cancel
  Exit Sub
  End If
End If
tb.AddNew
If Text1.Text = "" Then        '# si non saisie
  MsgBox "Date incorrect"
  Exit Sub
End If
If Text2.Text = "" Then        '# si non saisie
    MsgBox "Numéro OF invalide"
    tb.Cancel
    Exit Sub
End If
If Text3.Text = "" Then        '# si non saisie
  MsgBox "Valeur incorrect"
  tb.Cancel
  Exit Sub
End If
If Combo1.Text = "" Then
  MsgBox "Format incorrect"
  tb.Cancel
  Exit Sub
End If
tb!Date = Text1.Text    '#écrire date
tb!NumOf = Text2.Text       '#écrire Of
tb!Compteur = Text3.Text    '# écrire valeur compteur
tb!Format = Combo1.Text


tb.Update
Set tb = Nothing
End Sub


Private Sub Command3_Click()
  If tb.EOF = True Then
    tb.MoveFirst
  End If
If tb.EOF = True Then
  MsgBox "Plus d'enregistrement précédant"
  Exit Sub
End If
Text4.Text = tb.Fields!Date
Text5.Text = tb.Fields!NumOf
Text6.Text = Format((tb.Fields!Compteur), "# ##0")
Text7.Text = tb.Fields!Format
tb.MoveNext
End Sub


Private Sub Command4_Click()
bd.Close
Set bd = Nothing
End
End Sub


Private Sub Form_Load()
Dim retCharger As String
'Connection Base de donnée
bd.Provider = "microsoft.jet.oledb.4.0"
bd.ConnectionString = "C:\Documents and Settings\CalderonN\Base de donnée\bdCompteurRebut1.mdb"
bd.Open
Call Charger
'Selection de la combobox1
Combo1.AddItem "Format 1", 0
Combo1.AddItem "Format 2", 1
Combo1.AddItem "Format 3", 2
Combo1.AddItem "Format 4", 3
Combo1.AddItem "Format 5", 4
End Sub
Private Sub Charger()
'Affichage des auciennes valeurs (les plus récentes)
'La date
  If Not tb.EOF Then
    Text4.Text = tb.Fields(0)
    dateOLD = Text4.Text
  End If
'Le numéro OF
  If Not tb.EOF Then
    Text5.Text = tb.Fields!NumOf
  End If
'La valeur du compteur
  If Not tb.EOF Then
    Text6.Text = Format((tb.Fields!Compteur), "# ##0")
  End If
'Le format de boite
 If Not tb.EOF Then
    Text7.Text = tb.Fields!Format
  End If
End Sub

J'espère seulement que ca ne te prend pas trops la tête sinon je laisse tombé et je garde le prog tel quel !!
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

si je met le tb.Move avant il me saute a chaque foix une ligne lorsqu'il est a la fin et que je re-click dessus:
par exemple mes valeurs sont 1,2,3,4
début à 1
je fait le next
-->2
next
-->3
next
-->4
next
et la il passe a 2 au lieu de reprendre à 1, tu comprend ?
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

ps je fini ma journée a 12h00 !!
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

Ok merci pour ton aide !!!

Donc si je comprend bien je doit revoir mon programme dans sa totalité pour une optimisation mais je n'ais pas très bien comprit ce que tu a fait en faisant toutes ces affectations.
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

de plus tu n'utilise que le recordset "ra" et pas les autre "ra1,ra2,ra3......" ???
Messages postés
38
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
6 juin 2006

Enfin de tt ce n'est qu'un appercu de ton prog lol !!!

bon je vais maintenant passé avec la VRAI bdd de mon entreprise dasn un premier temps en local mais en suite via le réseau, ca me semble sacrèment compliquer mais bon pas insurmontable ^^.
Je suis vraiment un noob en vb bououououou.....
Messages postés
165
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
24 avril 2018

1°) C'est comme le vélo..plus tu pratique, moins tu te casse la g....!!

2°) Ce que je t'ai expédié, n'est qu'un "petit" morceau de mon code !!!

PS: choisis des noms de recordsets simples et explicites
ex: ra pour recorset article, rf pour recordset fournisseur, etc...
Cela est plus rapide à écrire que rec_fournisseur par exemple...
Et çà evite les problème de 'dyslexie', ex: rec_fournissuer donc encore perte de temps.

Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!