Rapport de message :*
 

Re: Pb base de données/formulaires

Titre du sujet : Re: Pb base de données/formulaires
par tube le 24/05/2012 16:59:08

C'est bon Mth, j'ai réussi à adapter cette technique de zone dynamique, le lien que tu avais mis était très bien détaillé, et de toute façon le fichier que tu m'avais confectionné faisait exactement ce que je voulais donc je n'ai eu aucun mal à l'adapter.

Je suis face à un nouveau problème, en plus du problème évoqué au post précédent.

Pour ce nouveau problème, je m'explique, voici déjà la macro que j'utilise qui est en rélaité celle que didier m'a fourni plus deux lignes que j'ai rajouté et que j'ai expliqué dans des posts précédents :

Private Sub CommandButton1_Click()
Dim WbkCible As Workbook
Dim R As Range
Dim nomfich As String
Dim ligne As Long
Dim i As Integer, Annee As Variant

    nomfich = "BDD_" & ThisWorkbook.Name
    Annee = InputBox(Prompt:="En quelle année ces données ont été recueillies?", Title:="Année")
    If Annee = "" Or Annee = 0 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("Feuil1")
            'Le traitement de l'année est-il déjà présent ?
            Set R = .Columns(1).Find(Annee)
            If Not R Is Nothing Then
                MsgBox "Traitement année " & Annee & " déjà effectué !", vbExclamation
                Exit Sub
            End If
           
            ligne = .Range("a65536").End(xlUp).Row + 1
            .Cells(ligne, 1).Value = Annee      'Année en colonne 1
           
            For i = 1 To 6
                .Cells(ligne, i + 1).Value = ThisWorkbook.Sheets("test_BDD").Cells(i + 6, 8).Value 'Copie des données
            Next i
        End With
   
        With .Sheets("Conso_annuelle_elect")
            ligne = .Range("a65536").End(xlUp).Row + 1
            .Cells(ligne, 1).Value = Annee      'Année en colonne 1
           
            .Cells(ligne, 2).Value = ThisWorkbook.Sheets("3_Comptage_Elect").Cells(42, 7).Value 'Copie des données
            .Cells(ligne, 3).Value = ThisWorkbook.Sheets("3_Comptage_Elect").Cells(39, 7).Value  '
            .Cells(ligne, 4).Value = ThisWorkbook.Sheets("3_Comptage_Elect").Cells(33, 7).Value  'Copie des données
        End With
    End With
   
    WbkCible.Save 'Enregistre le fichier
End Sub


 

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é.

A noter que j'ai pour objectif, même si je n'ai pas encore trouvé la réponse, comme expliqué au post précedent, de mettre en place quelques lignes pour pouvoir écraser les lignes déjà existante (si je veux refaire le traitement de l'année 2011 par exemple), donc cela résoudrais le problème. Mais toujours est-il que ce n'est pas normal qu'il me dise que je ne peux pas faire le traitement alors que je viens de supprimer la ligne "2011".

En espérant que j'ai été clair, je vous serais très reconnaissant si vous m'aidiez encore une fois, car à priori, si ces deux problèmes, liés étaient résolus, tout serait ok pour moi, et je ne vous embetterais plus ensuite.