• Initiateur de la discussion Initiateur de la discussion lolo_bob2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

lolo_bob2

Guest
Bonjour à tous,

Voila j'ai un code VBA qui permet d'envoyer des données d'excel vers une table access.
Cela fonctionne parfaitemement, le seul problème que je rencontre est le suivant si j'envoie des données lorsque la table est vide il n'y a pas de probleme cela fonctionne. Si je rajoute une ligne au fichier excel et que je renvoie les données, la nouvelle ligne ne s'inscrit pas dans la table access, je pense que c parcequ'il touve des doublons !

Code:
Sub AjouterDesEnregistrementsAUneTable() 
Dim MyDB As Database, MyTable As Recordset, Sh As Worksheet 

Set MyDB = OpenDatabase('S:\\Qualité\\BDD Qualité\\BDD Qualité.mdb') 
Set MyTable = MyDB.OpenRecordset('produits') 
Set Sh = Worksheets('Feuil1') 

With Sh 
    For Each r In .Range('A5:C300').Rows 
        With MyTable 
            .AddNew 
            !sap = Sh.Cells(r.Row, 1) 
            !nom = Sh.Cells(r.Row, 2) 
            !prenom = Sh.Cells(r.Row, 3) 
            .Update 
        End With 
    Next 
End With 
Set MyDB = Nothing: Set MyTable = Nothing: Set Sh = Nothing 

End Sub

Le second code amélioré avec une conditionnelle :


Code:
Sub AjouterDesEnregistrementsAUneTable() 

Dim test As Byte 
Dim rs As Recordset 
Dim MyDB As Database, MyTable As Recordset, Sh As Worksheet 
test = 0 

Set MyDB = OpenDatabase('S:\\Qualité\\BDD Qualité\\BDD Qualité.mdb') 
Set MyTable = MyDB.OpenRecordset('produits') 
Set Sh = Worksheets('Feuil1') 

Set rs = 'Select distinct sap from produits' 

For Each r In .Range('A5:C300').Rows 

     Do While (rs.EOF = False And test = 0) 
         'Si la clé de ta ligne à ajouter est deja utilisée alors on stop de comparer 
         If (rs!sap = Sh.Cells(r.Row, 1)) Then test = 1 
     Loop 
     'si la clé est non prise alors on ajoute 
     If (test = 0) Then 
        With MyTable 
            .AddNew 
            !sap = Sh.Cells(r.Row, 1) 
            !nom = Sh.Cells(r.Row, 2) 
            !prenom = Sh.Cells(r.Row, 3) 
            .Update 
        End With 
     End If 
     test = 0 
Next 

End Sub

j'ai une erreur qui me dit 'erreur de compilation incompatibilité de type'
je pense qu'il y a un probleme dans le code mais je sais pas ou car il me grise la ligne select ..from... et apres il me met en jaune 'Sub AjouterDesEnregistrementsAUneTable()'
Pouvez vous m'aider

Merci beaucoup

A+
 
Bonjour,

A mon avis le distinct ne passe pas ici.
Pourquoi ne supprime tu pas toute les infos, pour tout réinsérer?
Oui ça prend surement plus de temps, mais au moins t'es sur de pas avoir d'erreur.
Pour ce qui est du reste , je ne pense pas ca fonctionne comme access (recordset...) enfin je sais pas, moi je le fais de excel à SQL server.

Bon courage
 
Merci pour ta réponse

En fait je peux pas supprimer toutes les infos car je fais des extractions de SAP vers excel, après je lance ma macro: les produits sont envoyés dans la table de la base access.
Ensuite chaque produit est testé est une date de test lui est affecté et après je génére un graphique (indicateur) ...
Comme je veux un historique je peux pas les éffacé..
c'est pourquoi il faut que je trouve vraiment la solutions pour éviter les doublons...

Merci beaucoup

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
455
  • Question Question
Réponses
7
Affichages
512
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
4
Affichages
757
Retour