Utiliser Range ou Cells

Bonjour à tous,

Le petit bout de code suivant :

Dim I, K, nb As Integer
nb = 1
For K = 1 To 3
    For I = 1 To 3
        Cells(I, K).Value = nb
        nb = nb + 1
    Next I
Next K

me donne :

image

Alors pour le plaisir et surtout par curiosité ..... certes malsaine (lol)
Est-il possible d'obtenir le même résultat en utilisant l'objet "Range" plutôt que l'objet "Cells"

J'ai bien pensé à ceci :

Dim I, nb As Integer
nb = 1
For I = 1 To 3
    Range("A" & I).Value = nb
    Range("B" & I).Value = nb + 1
    Range("C" & I).Value = nb + 2
nb = nb + 3
Next I

Mais
1) ce n'est pas des plus "joli"
2) si je voulais utiliser 100 colonnes, alors chapeau la longueur de ce bout de code

Un grand merci si vous vous penchez sur cette question annexe sans très grand intérêt

Bonjour,

Range ou cells c'est la même chose

Mais pour 100 colonnes, il vaut mieux utiliser .Cells vous aurez moins de lignes

Par contre attention avec votre déclaration de variables

Avec ceci

Dim I, K, nb As Integer

Seul nb est Integer, I et K sont variant

Donc votre code comme ceci

Dim I as integer, K as integer, nb As Integer

Mais dans votre cas avec 3 lignes et 100 colonnes vous pouvez aussi changez Integer par Byte.
Pensez aussi à toujours ajouter le nom de la feuille devant cells ou Range

si ok,

Cordialement

Bonjour Jacky et Dan,

Essayez plutot :

Range.Item(i, j)

Ou bien

Range.Cells(i, j)

Comme l'indique Dan, .Cells est plus adapté dans votre cas.

Les deux fonctions sont à peu près équivalentes, mais range peut vous donner des retours un peu différents dans des cas spécifiques avec l'utilisation de For Each sur cette range. Pour les lignes et les colonnes vous aller itérer par défaut sur ces derniers, et non sur les cellules de ces derniers.

Par ailleurs, comme indiqué ici : Excel VBA Tutorial: Understanding the difference between Range and Cells in Excel VBA – Launch Excel

image

Suivant l'usage, on préférera Range ou Cells, elles ont chacune leurs avantages et inconvénients.

Bonjour a tous,

En cherchant l'adresse de la colonne
Puis Mid et Instr pour eliminer certains caracteres

Dim Lig As Integer, Col As Integer, nb As Integer
Dim Col_Name As String

nb = 1
For Col = 1 To 3
    For Lig = 1 To 3

        Col_Name = Columns(Col).Address
        Col_Name = Mid(Col_Name, 2, InStr(1, Col_Name, ":") - 2)

        Range(Col_Name & Lig).Value = nb
        nb = nb + 1
    Next Lig
Next Col

A+

Enfin, pour finir sur votre exemple : si vous aviez 10 000 lignes et colonnes, range est plus intéressant.

Car vous pouvez calculer toutes vos valeurs en 1 boucles, stockées dans une array. Puis coller l'array directement dans la feuille en 1 étape.

1 accès en écriture sur le classeur vs 10000x10000=1e8 accès

Je vous conseille de tester avec 1000 plutot que 10 000. Car ça m'a quand meme pris 30 secondes en "mode rapide". Précisons que le calcul de l'array en revanche est quasi instantané.

Sub test()
  Dim k As Long, i As Long, nb As Long

  nb = 1

   ' très rapide
  Dim myArr(1 To 10000, 1 To 10000) As Long
  For k = 1 To 10000
      For i = 1 To 10000
          myArr(i, k) = nb
          nb = nb + 1
      Next i
  Next k

   ' lent
  With ActiveSheet
    .Range(.Cells(1, 1), .Cells(10000, 10000)).Value2 = myArr
  End With
End Sub

Merci à vous tous,
Geof52, astucieuse ta proposition, obtenir l'adresse sous forme alphanumérique pour pouvoir utiliser l'objet "Range"
Au plaisir

Rechercher des sujets similaires à "utiliser range"