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 :
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Range("G:G").Copy Range("G:G").PasteSpecial Paste:=xlPasteValues
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
Partager