Nombres de lignes dans une plage non-contigües

Bonjour à tous,

J'ai la plage nommée "Limite" suivante :

=Feuil1!$G$13:$L$13;Feuil1!$G$17:$L$17

Quand je voudrais compter le nombre de lignes de cette plage, j'aurais toujours 1, or il y a bien deux lignes :

Sub test0()
Dim x As Long

x = Range("Limite").Rows.Count
Debug.Print "Lignes = " & x

End Sub

Merci.

Bonjour,

Sub test0()
    Dim x As Long, ar As Variant
    For Each ar In Range("Limite").Areas
        x = x + ar.Rows.Count
    Next ar
    Debug.Print "Lignes = " & x
End Sub

eric

Bonsoir eric,

Merci pour le code.

Puisque ma PlageNommée contient deux Areas() (x=2), chacune une ligne, j'ai voulu copier chaque Areas() à part.

Pour la première Areas(1), la ligne est exécutée sans erreur :

Range(PlageNommée).Areas(1).Copy .Range("A" & L)

Mais cette deuxième ligne génère une erreur :

Range(PlageNommée).Areas(2).Copy .Range("A" & L)

Erreur définie par l’application ou par l'objet

                For Each ar In Range("Limite").Areas
                    x = x + ar.Rows.Count
                    Range(PlageNommée).Areas(x).Copy .Range("A" & L)
                    L = L + 1
                Next ar

Pas de raison...

Il faudrait un fichier réduit au minimum avec cette erreur.

eric

Avec le code suivant dans un nouveau claseer, il n'y a pas d'erreru :

Sub test()
    Dim X As Long, L As Long
    Dim PlageNommée As String

    PlageNommée = "Limite"
    X = 0: L = 15
    With Sheets("Feuil1")
    For Each Ar In Range("Limite").Areas
        X = X + Ar.Rows.Count
        Range(PlageNommée).Areas(X).Copy .Range("A" & L)
        L = L + 1
    Next Ar
End With
End Sub

Je crois qu'il y a une chose dans le code principale qui affecte le bon fonctionnement

Vu qu'ar est un range écrit plus simplement

ar.Copy Range("A" & l)

eric

Bonjour,

Si on a plusieurs éléments à sauvegarder (Plus que deux), peut-on associer des tableaux au dictionnaire avec le même classement d'indices dans les deux cotés?

Par exemple si on a dans le dictionnaire « L », 2 pour le deuxième indice, on aura pour le même indice dans TbNom(2)=Nom1, TbGrade(2)=ING, TbSys(2)=L ?

Merci.

Bonjour,

il te faut 2 dictionaries.

1 pour tes sommes, 1 pour tes indices, que tu crées au même moment.

Si tu l'appelles dictInd, TbNom(dictInd("L")) te ramènera TbNom(2) si dictInd("L")=2

eric

Bonsoir,

Mais les deux dictionnaires ne seront pas égaux en fin de compte.

1) Le premier dictionnaire contiendra tous les systèmes (30 par exemple)

2) Le deuxième dictionnaire ne contiendra que les systèmes parmi les 30 existants, qui ont une valeur supérieure à 0 (2 par exemple, parce qu'il y deux noms dans notre code exemple)

Comment coder tout ça ?

Ben je ne sais pas ce que doit faire ton programme et ce qu'il a besoin. C'est toi qui sait et qui doit choisir.

Que les 2 dict n'aient pas la même taille ce n'est pas un problème, du moment que tu sais exactement comment ils sont constitués et qu'ils correspondent à ton besoin.

Dès que tu trouves un "L" et bien tu l'ajoutes à ton dictInd avec en item dernier index+1

Que son index soit 1 ou 12 tu t'en moques puisque tu récupères son index avec dictInd("L"). Il faudra toujours travailler avec c'est tout, puisque l'ordre sera quelconque (ils seront dans l'ordre où ils sont trouvés).

eric

Rechercher des sujets similaires à "nombres lignes plage contig"