Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1276 connectés 

  FORUM HardWare.fr
  Windows & Software
  Logiciels

  Base de données Access

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Base de données Access

n°2305553
scarface19
Posté le 26-01-2006 à 16:32:40  profilanswer
 

Bonjour,
 
Je débute avec l'utilisation de Access. J'ai une base (1seule table) importante de données à traiter (1million de lignes, 15champs).
Je souhaite faire la différence entre deux lignes de ma base et, suivant le résultat, fusionner les lignes.
Exemple :  
Ligne     Début    Fin      Nb jours
1           15/01   18/01     3
2           19/01    24/01    6
 
Si 19/01-18/01=1 alors je souhaite obtenir une seule ligne :
Ligne     Début    Fin      Nb jours
1          15/01    24/01     9
 
Je n'ai trouvé dans aucun bouquin ce genre de requêtes. Est-il possible de le faire sous Access, si oui par quel moyen?
 
Je vous remercie par avance de vos réponses

mood
Publicité
Posté le 26-01-2006 à 16:32:40  profilanswer
 

n°2305583
Lord Nelso​n
Posté le 26-01-2006 à 16:58:34  profilanswer
 

Salut,
 
Directement avec une requête Access, je ne vois pas de possibilité.
En revanche, avec un code VBA, ça doit être possible :
 

  • Lecture de la table,
  • si l'enregistrement remplit la condition,
  • fusionner l'enregistrement avec le précédent,
  • Ecrire le nouvel enregistrement dans une nouvelle table,
  • sinon
  • Ecrire l'enregistrement dans la nouvelle table,
  • Passer à l'enregistrement suivant.


As-tu une expérience VBA ?
 
A+
Horatio
 
 
 

n°2305592
scarface19
Posté le 26-01-2006 à 17:02:53  profilanswer
 

Oui, j'ai fait du VBA mais que pour Excel.
J'avais fait la programmation sous Excel mais je n'ai pas pu continuer en raison la taille de ma base.
La programmation est-elle identique entre Excel et Access?

n°2305610
Lord Nelso​n
Posté le 26-01-2006 à 17:15:19  profilanswer
 

Re,
 
Fondamentalement, c'est le même langage VB mais pour chaque logiciel de la suite Office, VBA propose des objets spécifiques.
Par exemple Range est l'objet VBA-Excel qui correspond à une cellule ou une plage de cellule.
L'équivalent VBA-Access serait l'objet Recordset, représentatif d'un ou plusieurs enregistrements.
 
J'espère que cet indice pourra t'aider.
A+
Horatio

n°2307301
scarface19
Posté le 28-01-2006 à 16:18:08  profilanswer
 

Je n'arrive pas à trouver l'équivalent dans VBA-Access de la formulation VBA-Excel:
 
If Cells (i+1,2)-Cells(i,1)=1 Then
Cells(i,2)=Cells(i+1,2)
Cells(i+1,2).EntireRow.Delete
End If

 
Savez-vous s'il est possible d'écrire ce genre de subroutine en Access?
 
Merci pour votre aide!

n°2308444
Lord Nelso​n
Posté le 29-01-2006 à 21:05:22  profilanswer
 

Salut,
 
Oui, c'est possible. Mais pour un début en Access-VBA, tu places la barre très haut !
 
Voici à quoi ressemblerait le code correspondant à ta moulinette :
 


Public Sub test_Lecture()
'Cocher la référence "Microsoft DAO 3.51 Object Library"
'Avant de lancer cette procédure, il faut disposer d'une
'table "DonnéesBrutes" et d'une table "DonnéesCorrigées",
'copie de la précédente mais sans aucun enregistrement.
'Pour ces 2 tables, la structure est la suivante :
'Ligne - Entier long
'Début - Date/heure
'Fin - Date/heure
'Jours - Entier long
'*******************************************************
Dim Db As DAO.Database
Dim tbl1 As DAO.TableDef
Dim tbl2 As DAO.TableDef
Dim DateD As Date, DateF As Date
Dim nbJours As Long, NumLigne As Long
Dim RS1 As DAO.Recordset
Dim RS2 As DAO.Recordset
 
Set Db = CurrentDb
'Ouverture des tables
Set tbl1 = Db.TableDefs("DonnéesBrutes" )
Set tbl2 = Db.TableDefs("DonnéesCorrigées" )
Set RS1 = tbl1.OpenRecordset(dbOpenTable)
Set RS2 = tbl2.OpenRecordset(dbOpenTable)
RS1.MoveFirst
NumLigne = RS1!Ligne
DateD = RS1!Début
DateF = RS1!Fin
nbJours = RS1!Jours
'Boucle principale
Do
  RS1.MoveNext
  If RS1.EOF Then
    'Fin de fichier, enregistrer la dernière ligne
    'et sortie de boucle
    RS2.AddNew
    RS2!Ligne = NumLigne
    RS2!Début = DateD
    RS2!Fin = DateF
    RS2!Jours = nbJours
    RS2.Update
    Exit Do
  End If
  If RS1!Début - DateF = 1 Then
    'Cumuler les champs Fin et Jours
    DateF = RS1!Fin
    nbJours = nbJours + RS1!Jours
  Else
    'Enregistrer dans la table
    'DonnéesCorrigées
    RS2.AddNew
    RS2!Ligne = NumLigne
    RS2!Début = DateD
    RS2!Fin = DateF
    RS2!Jours = nbJours
    RS2.Update
    NumLigne = RS1!Ligne
    DateD = RS1!Début
    DateF = RS1!Fin
    nbJours = RS1!Jours
  End If
Loop
MsgBox "Traitement terminé"
Set RS2 = Nothing
Set RS1 = Nothing
Set tbl1 = Nothing
Set tbl2 = Nothing
Set Db = Nothing
 
End Sub


 
Je n'ai pas retenu ton idée de suppression d'enregistrement mais préféré copier dans une nouvelle table les données retraitées.
 
A toi de jouer !
 
A+
Horatio
 
 
 
 

n°2312733
scarface19
Posté le 02-02-2006 à 13:47:01  profilanswer
 

Merci Horatio pour ton aide!
 
J'ai utilisé ton code. Je n'ai pas d'erreurs lors de la compilation. Par contre, le programme ne fait qu'inverser les lignes...
 
Peut-être sauras-tu d'où vient ce problème?!
 
Merci encore!

n°2313154
Lord Nelso​n
Posté le 02-02-2006 à 20:02:54  profilanswer
 

Salut,
 :pfff:  
Je ne vois pas ce qui pourrait inverser les lignes. Copies le code que tu as fait tourner pour que je l'examine.
A+
Horatio

n°2327731
scarface19
Posté le 15-02-2006 à 16:46:27  profilanswer
 

J'ai réussi à faire tourner le programme pour en finir.
 
Merci pour ton aide!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Windows & Software
  Logiciels

  Base de données Access

 

Sujets relatifs
Aide sur base de données accessInclusion de photos dans une base de données Access
Base de données Access compléteaccess et base de données récalcitrante
conversion d'une base de données Access 2003 à 97Probleme ouverture base de données access 1.X
Accéder à une base de données Access par le Web ? (IIS 6.0)Base de données Access et pages web dynamiques, j'y arrive pas !
base de données Access acessible à partir du web... 
Plus de sujets relatifs à : Base de données Access


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR