Rapport de message :*
 

Re: Pb base de données/formulaires

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,