Affectation incomplète d'une plage à un nom
Bonjour à tous,
En général j'arrive à ma débrouiller, mais là je bloque... je pense que j'ai touché une limite d'excel mais je n'ai pas réussi à trouver d'info là-dessus... je m'explique :
J'ai fait une macro qui est lancée par un click bouton. Au click, la macro affecte un nom à une plage, cette plage est définie par toutes les cellules d'une certaine couleur :
Private Sub CB_Test_Rename_plage_Click()
Dim couleur As Long
couleur = Range("N2").Interior.Color
Dim plage As Range
Set plage = Range("N2")
Dim c As Range
Dim temp As String
Dim test1 As String
Dim test2 As String
'ActiveSheet.Unprotect
For Each c In ActiveSheet.UsedRange
If c.Interior.Color = couleur Then
Set plage = Application.Union(plage, c)
End If
Next
'plage.Locked = False
temp = ThisWorkbook.ActiveSheet.Name
plage.Select
temp = "='" & temp & "'!" & plage.Address
test1 = plage.Count
On Error Resume Next
ThisWorkbook.Names.Item("PLAGE_DATAS_USER").Delete
On Error GoTo 0
ThisWorkbook.Names.Add Name:="PLAGE_DATAS_USER", RefersTo:=temp
Range("PLAGE_DATAS_USER").Select
test2 = Range("PLAGE_DATAS_USER").Count
'ActiveSheet.Protect
End SubC'est assez simple dans l'idée, c'est un peu fouilli et pas très élégant parfois mais j'ai laissé mes "instructions de test".
ça marchait bien jusqu'a ce que j'augmente de plus en plus le nombre de cellules colorées de la bonne couleur.
le range "plage" contient plus de 100 élements (et les bons, vérifié avec l'instruction select), là ou ma plage data user ne contient que 78 éléments...
Alors je me demande si je n'ai pas attend une limite d'excel quelque part...
Voilà si vous avez une idée de ce qui déconne, je suis preneur...
Merci d'avance
Si ça peut faire avancer le schmilblick :
j'ai fait ça :
Range("t72") = temp
Range("t73") = plage.Address
Range("t74") = Range("PLAGE_DATAS_USER").AddressEn fait je récupère bien la même chose dans les trois cellules, mais pas les adresses de la plage complete, pourtant, "plage" pointe réellement sur plus de cellules puisque quand je fait plage.select, il y a plus de cellules selectionnées que celles retournées par plage.address
là je comprend pas...
bonjour nhl8612 et
Rien n'est spécifié sur le site de Microsoft
https://support.microsoft.com/fr-fr/office/sp%C3%A9cifications-et-limites-relatives-%C3%A0-excel-167...
Mais je sais que pour une plage nommée il y a une limite du nombres de cellules discontinues
@+
Bon j'ai réglé mon problème.
Alors en effet il y une limite, mais pas que pour une plage nommée : si un plage est composée d'une grande quantité de cellules discontinues, on peut la manipuler sans problème, par contre, quand on récupère son addresse (range(xyz).address) vba tronque les adresses
du coup j'ai trouvé une solution (voir plus bas). En résumé: je récupère l'adresse de ma plage_tot, je l'affecte à mon "nom_0", si quand je compte le nombre d'aréa de mon range("nom_0") il est plus petit que le nombre d'aréa de plage_tot, alors je crée un "nom_1" et je lui affecte le reste, et je continu jusqu'à ce j'atteigne la fin de ma plage_tot
i = 0
cpt = 0
fini = False
temp = ThisWorkbook.ActiveSheet.Name
temp = "='" & temp & "'!" & plage_tot.Address
ThisWorkbook.Names.Add Name:="PLAGE_DATAS_USER_" & i, RefersTo:=temp
If Range("PLAGE_DATAS_USER_" & i).Areas.Count < plage_tot.Areas.Count Then
Do
Set plage_temp = Nothing
For cpt = Range("PLAGE_DATAS_USER_" & i).Areas.Count + 1 To plage_tot.Areas.Count Step 1
If plage_temp Is Nothing Then
Set plage_temp = plage_tot.Areas(cpt)
Else
Set plage_temp = Application.Union(plage_temp, plage_tot.Areas(cpt))
End If
Next
Range("PLAGE_DATAS_USER_" & i).Locked = False
i = i + 1
temp = ThisWorkbook.ActiveSheet.Name
temp = "='" & temp & "'!" & plage_temp.Address
ThisWorkbook.Names.Add Name:="PLAGE_DATAS_USER_" & i, RefersTo:=temp
If Range("PLAGE_DATAS_USER_" & i).Areas.Count = plage_temp.Areas.Count Then fini = True
Loop While fini = False
End If