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 Sub

C'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").Address

En 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
Rechercher des sujets similaires à "affectation incomplete plage nom"