Bonjour,
Ma question concerne la syntaxe en VBA lorsqu’on travaille avec une formule en référence de cellule ou en référence structurée.
Je mets à jour périodiquement une feuille (Format Tableau) avec une colonne contenant Oui ou vide suivant une formule qui gère une différence de date. J’ajoute la feuille de mise à jour en entier à la base de données (Format Tableau) puis je copie la colonne de la base de données contenant la date et la recopie en valeur (éliminer la formule) dans la base de données finale (Tableau).
Le code est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Range("G:G").Copy
Range("G:G").PasteSpecial Paste:=xlPasteValues
Si ma formule est en référence structurée =SI([@[DATE_FCM]]>[@DATE];"Oui";""), j’obtiens #VALEUR ! dans la base de données finale
Si cette formule est en référence de cellule =SI(H8>F8;"Oui";"") ça fonctionne et j'obtiens Oui ou vide.

J’aimerais comprendre pourquoi cela fonctionne différemment. Le format structuré doit modifier quelque chose lors de la recopie. J'aimerais aussi avoir une indication pour la syntaxe me permettant d’utiliser, quand même, une référence structurée.

Le code complet ci-dessous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Sub FCM_MàJ()
'Ajout de la feuille FCM_Mise à Jour à FCM_data
Dim ligne As Long
Dim Rep As Integer
Rep = MsgBox("Confirmer la mise à jour de la base des FCM", vbOKCancel, "PACTE-SSE")
' Réponse OK
If Rep = 1 Then
    'Tableau de destination vide
        If Range("Ta_FCM_Data").ListObject.DataBodyRange Is Nothing Then
             'Copy de Ta_RapMensuel_MàJ dans Ta_Rap_Mensuel
             Sheets("FCM_MàJ").ListObjects("Ta_FCM_MàJ").DataBodyRange.Copy Sheets("FCM_Data").Cells(5, 1)
             'Affecter le numéro 1 à la 1° ligne
             Sheets("FCM_Data").Range("A5").Value = 1
             'Copier-coller la formule date en valeur
             Sheets("FCM_Data").Select
             Range("F:F").Copy
             Range("F:F").PasteSpecial Paste:=xlPasteValues
            'Copier-coller le Oui en valeur
             Range("G:G").Copy
             Range("G:G").PasteSpecial Paste:=xlPasteValues
            'Déselectionner la colonne F:F
             Application.DisplayAlerts = False
             ' Supprimer MFC
             Columns("H:H").Select
             Cells.FormatConditions.Delete
 
    'Tableau de destination déjà rempli
        Else
            'Numéro de la première ligne vide de la base de données
            ligne = Sheets("FCM_Data").Range("A1048576").End(xlUp).Row + 1
            'Confirmation et copie de la mise à jour
'          MsgBox "Confirmer la mise à jour de la base des FCM", vbOKCancel, "PACTE-SSE"
            'Copy de Ta_RapMensuel_MàJ dans Ta_Rap_Mensuel
            Sheets("FCM_MàJ").ListObjects("Ta_FCM_MàJ").DataBodyRange.Copy Sheets("FCM_Data").Cells(ligne, 1)
            'Copier-coller la formule Date en valeur
            Sheets("FCM_Data").Select
            Range("F:F").Copy
            Range("F:F").PasteSpecial Paste:=xlPasteValues
            'Copier-coller le Oui en valeur
             Range("G:G").Copy
             Range("G:G").PasteSpecial Paste:=xlPasteValues
            'Déselectionner la colonne F:F
            Application.DisplayAlerts = False
            'Supprimer MFC
            Columns("H:H").Select
            Cells.FormatConditions.Delete
        End If
Else
    Exit Sub
End If
    'Compléter la numérotation
     Call FCM_NumAuto
     'Supprimer les lignes vides
     Call FCM_SuppressionLignes
    'Remettre à blanc la colonne H
    Call FCM_MàJBlanc
End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Sub FCM_NumAuto()
'Repart de la valeur la plus élevée quelque soit l'ordre de tri
  Dim i As Long, Maxi As Long
  With Sheets("FCM_Data").ListObjects("Ta_FCM_Data")
    Maxi = Application.Max(.ListColumns(1).DataBodyRange)
    For i = 1 To .ListRows.Count
      If .ListRows(i).Range(1) = "" Then
        Maxi = Maxi + 1
        .ListRows(i).Range(1) = Maxi
      End If
    Next i
  End With
End Sub
Sub FCM_SuppressionLignes()
'Suppression des lignes vides
Dim i As Integer
Range("Ta_FCM_Data").Activate
For i = Selection.Cells(Selection.Cells.Count).Row _
To Selection.Cells(1).Row Step -1
   If Cells(i, "H").Value = "" Or _
      IsEmpty(Cells(i, "H").Value) Then Rows(i).Delete
Next i
End Sub
Sub FCM_MàJBlanc()
'Mise à blanc des colonnes H
Sheets("FCM_MàJ").Select
              Range("H8:H43").ClearContents
End Sub