Titre du sujet : Re: Pb base de données/formulaires par myDearFriend! le 24/05/2012 21:55:55
Bonsoir tube, Mth, Mytå,
Le code suivant devrait répondre à ton problème (à tester !) :
' myDearFriend! - www.mdf-xlpages.com
Private Sub CommandButton1_Click()
Dim WbkCible As Workbook
Dim R As Range
Dim nomfich As String, Q As String
Dim ligne As Long
Dim i As Integer, Annee As Variant
Dim Ecrase As Boolean
nomfich = "BDD_" & ThisWorkbook.Name
Annee = Application.InputBox(Prompt:="En quelle année ces données ont été recueillies?", Title:="Année", Type:=1)
If Annee = False Then Exit Sub
On Error Resume Next
Set WbkCible = Workbooks.Open(ThisWorkbook.Path & "" & nomfich) 'Ouverture (ou réouverture) du classeur
On Error GoTo 0
If WbkCible Is Nothing Then
MsgBox nomfich & " introuvable", vbExclamation
Exit Sub
End If
With WbkCible
With .Sheets("xxxxBDD")
'Le traitement de l'année est-il déjà présent ?
Set R = .Columns(1).Find(Annee)
If Not R Is Nothing Then
Q = "Traitement année " & Annee & " déjà effectué !" & vbLf & vbLf & "Voulez-vous écraser les données existantes ?"
If MsgBox(Q, vbQuestion + vbYesNo, "mDF-XLpages.com") = vbNo Then Exit Sub
Ecrase = True
ligne = R.Row
Else
ligne = .Range("a65536").End(xlUp).Row + 1
End If
.Cells(ligne, 1).Value = Annee 'Année en colonne 1
For i = 1 To 6
.Cells(ligne, i + 1).Value = ThisWorkbook.Sheets("xxxxRDD").Cells(i + 6, 8).Value 'Copie des données
Next i
End With
With .Sheets("yyyyBDD")
If Ecrase Then
ligne = .Columns(1).Find(Annee).Row
Else
ligne = .Range("a65536").End(xlUp).Row + 1
End If
.Cells(ligne, 1).Value = Annee 'Année en colonne 1
.Cells(ligne, 2).Value = ThisWorkbook.Sheets("yyyyRDD").Cells(42, 7).Value 'Copie des données
.Cells(ligne, 3).Value = ThisWorkbook.Sheets("yyyyRDD").Cells(39, 7).Value '
.Cells(ligne, 4).Value = ThisWorkbook.Sheets("yyyyRDD").Cells(33, 7).Value 'Copie des données
End With
End With
WbkCible.Save 'Enregistre le fichier
End Sub
Par ailleurs et concernant ce que tu indiques :
Citation : tube a écrit :
Maintenant j'explique mon problème, j'appuie sur mon bouton, ma macro s'exécute, je renseigne l'année admettons 2011, cette valeur viens se coller dans la première colonne de ma base de données tout va bien. Pour tester, j'ai supprimer la ligne de l'année 2011 puisque je voulais retester le mécanisme. puis je relance ma macro, je re-rentre 2011, et là, paf, il me dit que j'ai déjà effectué le traitement pour cette année là, alors que je viens d'enlever la ligne correspondante.
Je voudrais savoir si à un moment, ce 2011 n'est pas dans une mémoire que la macro génère, ou un chose similaire, et s'il on ne pouvait pas vider cette mémoire à la fin de la macro, enfin je ne sais pas si cela devrais résoudre mon problème en tout cas je suis bloqué.
... pour tester en supprimant manuellement 2011, il faut supprimer la ligne 2011 impérativement dans les 2 onglets.
En espérant t'avoir aidé.
Et si tu penses que les réponses apportées te conviennent, je te remercie de mettre en pratique ce qui est inscrit au bas de ma signature.
Cordialement,
|