Fonction range limité a 255 caractères

Bonjour,
Ma macro pose soucis aujourd'hui à cause de la limite de 255 caractères de la fonction range.
Explication de la macro :
Je traverse une feuille excel, si l'information m'intéresse, je stock le n° de ligne dans un tableau.
Après, je génère une variable en mettant la case A + le n° des lignes séparé par un "," pour faire un range de ces données et les collées dans une nouvelle feuille Excel.
Aujourd'hui, la macro ne fonctionne pas, et je constate que c'est lorsque la chaine généré est > à 255 caractères.

ListChamp = ""
For i = 1 To NbMat
If ListChamp <> "" Then
ListChamp = ListChamp + ","
End If
ListChamp = ListChamp + "A" + CStr(ListMat(i))
Next i
FLABL.Range(ListChamp).Copy
'Sans les variables, cela correspond à ce code
Worksheets("Comp").Range("A3,A4,A6,A7,A8,A9,A10,A11,A12,A15,A16,A17,A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,A30,A33,A34,A36,A37,A38,A42,A43,A44,A45,A46,A47,A48,A49,A50,A51,A52,A53,A54,A55,A56,A57,A58,A59,A60,A61,A62,A63,A64,A65,A68,A69,A71,A72,A73,A74,A75,A76,A77,A78,A79,A80").Select

Auriez-vous une solution pour mon problème ?
J'ai pensé à mettre une fonction pour convertir les cellules qui se suivent. Réorganiser la chaine de "A3,A4,A6,A7,A8,A9,A10" par "A3:A4,A6:A10". Par contre, je n'ai aucune idée de commentaire cette fonction, ni de quel terme à utiliser pour rechercher sur internet.
Mais je suppose que quelqu'un a déjà réussi. Auriez-vous une solution ?

Merci d'avance

Bonjour,

Comme ceci

Worksheets("Comp").Range("A3:A4,A6:A12,A15:A30,A33:A34,A36:A38,A42:A65,A68:A80").Select

Bonjour Gorkt,

Réorganiser la chaine de "A3,A4,A6,A7,A8,A9,A10" par "A3:A4,A6:A10".

Il semblerait que vous avez déja apporté la solution au problème.

Avez-vous testé le Range de cette manière:

Range("A3,A4,A6:A12,A15:A30,A33,A34,A36:A38,A42:A65,A68,A69,A71:A80")

A+

EDIT: Bonjour M12

Bonjour à tous,

tu peux aussi définir ton range directement dans la boucle :

    Dim pl As Range, r As String
    For i = 1 To NbMat
        If ListChamp <> "" Then
            r = "A" & CStr(ListMat(i))
            If pl Is Nothing Then Set pl = Range(r) Else Set pl = Union(pl, Range(r))
        End If
    Next i

attention que tu auras une autre limite dont j'ai oublié la valeur (mais tu sembles en être loin actuellement).
Si le nombre de lignes est plus important, il vaut mieux faire une boucle dans la boucle pour traiter tes données par paquets de lignes.

Au passage les .Select sont fortement déconseillés et inutiles dans 99% cas
eric

Merci beaucoup pour vos réponses et la syntaxe.

Eriiic, tu me dis d'éviter les selects. C'était le cas.
Par contre, avec la nouvelle syntaxe, je n'arrive pas à l'appliquer sans faire un select avant :(.
Plutôt que de faire un truc pas propre, je préfère demander. (Même si à mon avis, la question doit être simple)

Dim FLABL As Worksheet
Set FLABL = Worksheets(NameFBom)
        FLABL.Select
        Set MonRange = Nothing
        For i = 1 To NbMat
            IDCellule = "A" & CStr(ListMat(i))
            If MonRange Is Nothing Then Set MonRange = Range(IDCellule) Else Set MonRange = Union(MonRange, Range(IDCellule))
        Next i
        MonRange.Copy

Si j'essaye sans le select, le range n'est pas pris dans la bonne feuille. Je dois passer à coté de quelque chose :(

Set MonRange = Nothing
with FLABL
        For i = 1 To NbMat
            IDCellule = "A" & CStr(ListMat(i))
            If MonRange Is Nothing Then Set MonRange = Range(IDCellule) Else Set MonRange = Union(MonRange, Range(IDCellule))
        Next i
        MonRange.Copy
end with

Cette syntaxe ne marche pas.

FLABL.MonRange.Copy

tu pourrais déposer un classeur de travail réduit au minimum stp ?

Normalement ça devrait passer avec le codename. Tu es sûr de son orthographe ?
Ton code est dans un module standard et non un module feuille ?

Merci encore de prendre du temps.

17classeur1.xlsm (17.45 Ko)

Si tu fais FLVIG.Select trop en amont, ton .Copy se fait dessus. C'est sur la feuille active qu'il s'effectue...
Il faut le déplacer juste avant le collé :

FLVIG.Select
FLVIG.Range("B1", "B" & 1 + NbMat).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Et la construction du range c'est directement dans la boucle For i = 2 To DerLig qu'il faudrait le faire.
Pas besoin de 2 boucles

Sinon c'est plutôt tortueux ton truc.
2 variables pour définir FLABL alors que tu peux changer le codename de la feuille dans les propriétés pour le même résultat.

image

Tu as besoin de ton range pour autre chose ensuite ?
Là ça serait plus simple de copier les valeurs dans un tableau que tu colles ensuite.
eric

Rechercher des sujets similaires à "fonction range limite 255 caracteres"