Modifier un enregistrement d'une base de donnee

ricoeva

XLDnaute Nouveau
:confused:Comment faire pour modifier un enregistremenr d'une base de donnée ?

J'ai une feuil1 où je saisie les données de plusieurs lignes qui vont s'enregistrer dans la base de donnée ("onglet BDD"). Donc pour cela pas de problème je fais une macro qui va insérer des lignes sur la BDD en fonction du nombre de ligne saisie dans la feuill1 et ensuite les copier coller.
j'ai la possibilité maintenant par une macro qui va filtrer en fonction de 3 critères (Periode/Géographie/Code Produit) de charger les donnée dans la feuil1 à partir de la BDD pour les modifier.

cependant si j'enregistre les données vont créer des doublons dans la BDD comment faire par VBA pour ecraser les données qui correspond au même 3 critères qui existe déjà dans la BDD et poser la possibilité de d'enregister si les données n'existe pas encore. Donc soit on modifie l'enregistrement (donc on vient écraser) soit on enregistre donc on enclenche la macro que j'ai déjà.

Donc l'idée du code est de:
1ère partie Vérifier que les données n'existent pas dans la BDD (et c'est à partir de là que je bloque) si elle n'existe pas j'appelle par la fonction call la macro enregistrement sinon
2ème partie si les données existe je fais ma selection par filtre et je copie colle les données de la partie Feuil 1 vers la partie Feuil2.

Je vous laisse le fichier en pièce jointe, et le code en dessous si vous avez une idée de comment faire. Je pense que ma première partie est complètement fausse car rechercher une donnée par Find c'est simple mais 3 critère en même temps je ne sais pas faire. Mais j'essaye par différents moyen...


Voici le code que j'ai essayé de mettre en place mais rien ne marche pour cette partie là...et là que je sens que je suis un vrai débutant

Sub Modification()

Dim Ws As Worksheet
Dim LastLig As Long
Dim i As Byte
Dim e As String
Dim h As String
Dim f As Long
Dim t As Long
Dim maSelect As Range

Set maSelect = Sheets("Feuil1").Range("D" & s & ":" & "Q" & t)
Set Ws = Worksheets("Feuil1")
e = Sheet("Feuil1").Range("A2")
h = Sheet("Feuil2").Range("B2")
With Worksheets("BDD")
For i = 3 To 13
.Find.Ws.Range ("C" & i)
Next i
Set c = .Find(e, LookIn:=xlValues)
Set e = .Find(h, LookIn:=xlValues)

If Not c & e & i Is Nothing Then Call enregistrement

Else
.AutoFilterMode = False
LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
With .Range("A1:R" & LastLig)
.AutoFilter Field:=1, Criteria1:=Ws.Range("A2")
.AutoFilter Field:=2, Criteria1:=Ws.Range("B2")
For i = 3 To 13
.AutoFilter Field:=3, Criteria1:=Ws.Range("C" & i)
If .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then
.Range("D2:Q" & LastLig).SpecialCells(xlCellTypeVisible).Copy.Range ("D" & i)
Else
Ws.Range("D" & i & ":Q" & i).ClearContents
End If
Next i
End With
.AutoFilterMode = False
End With
End If

Set Ws = Nothing
End Sub

En pièce jointe le fichier sur lequel je fais mes test
 

Pièces jointes

  • TEST EXTRACTION DONNEE3.xlsm
    61.7 KB · Affichages: 52
Dernière édition:

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 185
dernier inscrit
salhit