Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Nombre d'arguments dans un Array

Jojo973

XLDnaute Occasionnel
Supporter XLD
Bonjour,
Je dois trouver des plages de cellules bien précises lorsque l'on clique sur la feuille.
Il y a 11 colonnes et 120 lignes réparties sur 8 plages. Cela fait 88 arguments dans le array et cela ne passe pas
Je dépasse le nombre d'argument dans un tableau ou alors je pense qu'il est mal organisé :
VB:
plage = Array([D20:D50], [D51:D80], [D81:D92], [D93:D104], [D105:D113], [D114:D122], [D123:D131], [D132:D140], [E20:E50], [E51:E80], [E81:E92], [E93:E104], [E105:E113], [E114:E122], [E123:E131], [E132:E140], [F20:F50], [F51:F80], [F81:F92], [F93:F104], [F105:F113], [F114:F122], [F123:F131], [F132:F140], [G20:G50], [G51:G80], [G81:G92], [G93:G104], [G105:G113], [G114:G122], [G123:G131], [G132:G140], [I20:I50], [I51:I80], [I81:I92], [I93:I104], [I105:I113], [I114:I122], [I123:I131], [I132:I140], [J20:J50], [J51:J80], [J81:J92], [J93:J104], [J105:J113], [J114:J122], [J123:J131], [J132:J140], [K20:K50], [K51:K80], [K81:K92], [K93:K104], [K105:K113], [K114:K122], [K123:K131], [K132:K140], [L20:L50], [L51:L80], [L81:L92], [L93:L104], [L105:L113], [L114:L122], [L123:L131], [L132:L140], [M20:M50], [M51:M80], [M81:M92], [M93:M104], [M105:M113], [M114:M122], [M123:M131], [M132:M140], [N20:N50], [N51:N80], [N81:N92], [N93:N104], [N105:N113], [N114:N122], [N123:N131], [N132:N140])

Et il me manque encore les plages de la colonnes H

Il y a t il un moyen de ne pas rentrer autant d'arguments ou de tous les placer ?

Merci à vous.
 

piga25

XLDnaute Barbatruc
Bonjour,
peut être de cet façon :
VB:
Sub SimplifyRange()
    Dim plages As Collection
    Set plages = New Collection
    
    Dim cols As Variant
    cols = Array("D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N")
    
    Dim i As Integer
    Dim col As Variant
    For Each col In cols
        For i = 20 To 140
            Select Case i
                Case 20 To 50
                    plages.Add Range(col & "20:" & col & "50")
                Case 51 To 80
                    plages.Add Range(col & "51:" & col & "80")
                Case 81 To 92
                    plages.Add Range(col & "81:" & col & "92")
                Case 93 To 104
                    plages.Add Range(col & "93:" & col & "104")
                Case 105 To 113
                    plages.Add Range(col & "105:" & col & "113")
                Case 114 To 122
                    plages.Add Range(col & "114:" & col & "122")
                Case 123 To 131
                    plages.Add Range(col & "123:" & col & "131")
                Case 132 To 140
                    plages.Add Range(col & "132:" & col & "140")
            End Select
        Next i
    Next col
    
    ' Exemple de comment utiliser les plages
    Dim plage As Range
    For Each plage In plages
        ' Faites quelque chose avec chaque plage
        Debug.Print plage.Address
    Next plage
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Si vous tenez à un array unidimensionnel de range :
VB:
Sub test()
Const colonnes = "D E F G H I J K L M N"
Const lignes = "20:50 51:80 81:92 93:104 105:113 114:122 123:131 132:140"
Dim lesCols, lesLigs, i&, j&, n&, x
   lesCols = Split(colonnes): lesLigs = Split(lignes)
   ReDim plages(0 To (UBound(lesCols) + 1) * (UBound(lesLigs) + 1) - 1): n = -1
   For j = 0 To UBound(lesCols)
      For i = 0 To UBound(lesLigs)
         n = n + 1
         plages(n) = lesCols(j) & lesLigs(i)
         plages(n) = Replace(plages(n), ":", ":" & lesCols(j))
         Set plages(n) = Range(plages(n))
      Next i
   Next j
End Sub
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…