Valeur de Union of Ranges ne pouvant être affecté à une colonne de données non contiguë

J'essaie d'atsortingbuer les cellules A13:E300 d'une feuille à une autre feuille, en omettant la colonne D.

Le code suivant ne parvient pas à copyr la colonne E ; il semble y avoir un problème avec la fonction Union , car au lieu des valeurs de cette colonne, je reçois #N/A affecté à cette colonne sur la feuille cachée. Qu'est-ce qui ne va pas?

 Private Sub AddTemplate_Click() Dim Exposed_sheet As Worksheet, Hidden_sheet As Worksheet, MyPassword As Ssortingng Set Exposed_sheet = Sheets("Exposed Sheet") Set Hidden_sheet = Sheets("Hidden") MyPassword = "ssortingng" 'Reference: carriage return in msgbox http://www.ozgrid.com/forum/showthread.php?t=41581 If InputBox("Please enter the password to continue." & vbNewLine & vbNewLine _ & "Note: The ssortingng you type will be exposed, ie not '***'." & vbNewLine _ & "Note: This will save the Excel file!", "Enter Password: Enter the correct ssortingng.") <> MyPassword Then Exit Sub End If ' Reference: .Protect - https://stackoverflow.com/questions/11746478/excel-macro-run-time-error-1004 Hidden_sheet.Unprotect MyPassword 'References: ' dynamic referencing: https://stackoverflow.com/questions/45889866/how-to-assign-values-from-one-sheet-into-hidden-sheet-using-excel-vba-and-skip/45889960#45889960 ' adding text: https://stackoverflow.com/questions/20612415/adding-text-to-a-cell-in-excel-using-vba ' Union to exclude column: https://stackoverflow.com/questions/2376995/exclude-some-columns-while-copying-one-row-to-other With Hidden_sheet .Cells(1, Columns.Count).End(xlToLeft).Offset(1, 3).Resize(UBound(Exposed_sheet.Range("B6", "D9").Value, 1), UBound(Exposed_sheet.Range("B6", "D9").Value, 2)).Value = Exposed_sheet.Range("B6", "D9").Value .Cells(1, Columns.Count).End(xlToLeft).Offset(1, 6).Value = "Volume/Protocol" .Cells(1, Columns.Count).End(xlToLeft).Offset(6, 3).Resize( _ UBound(Union(Exposed_sheet.Range("A13:C300"), Exposed_sheet.Range("E13:E300")).Value, 1), 4).Value = _ Union(Exposed_sheet.Range("A13:C300"), Exposed_sheet.Range("E13:E300")).Value ' If you change the order putting this prior, you must change the offsets or the cell they count from. -- DB, Aug 28 2017 .Cells(1, Columns.Count).End(xlToLeft).Offset(0, 3).Resize(1, 3).Merge .Cells(1, Columns.Count).End(xlToLeft).Offset(0, 3).Value = Exposed_sheet.Range("A1").Value End With Hidden_sheet.Protect MyPassword ActiveWorkbook.Save End Sub 

En passant, je suis également intéressé par un code plus flexible: il ne doit pas être 300: nécessaire jusqu'à ce que la dernière ligne avec datatables – les jeux de données soient séparées par des lignes vierges. Au total devrait être inférieur à 150 lignes)

Une gamme et un tableau sont différents types d'objects et nécessitent donc différentes methods. Plus précisément, UBound renvoie l'indice d'un tableau alors que Union renvoie un object Range. (Apparemment, les zones sont des sous-sets de (constituants d'un object Range).

Selon Dirk Reichel ,

Union () est une plage (et les plages peuvent être non contiguës) [, tandis que] .Value [est] une valeur directe ou un tableau de valeurs. [A] rrays ne peuvent pas être contigus [.]

Une solution consiste à affecter séparément cette plage (E) non contiguë.