Twitter iPhone pliant OnePlus 12 PS5 Disney+ Orange Livebox Windows 11 ChatGPT

Problème boucle sur colonne ou problème de range sur colonne ?

10 réponses
Avatar
Alex
Bonjour =E0 tous,

J'essai de faire une boucle, non pas sur des lignes mais des colonnes,
mais je n'y arrive pas. J'ai =E9crit ceci :

Dim j As Integer
Dim NbCol As Integer

NbCol =3D Range("B1").CurrentRegion.Columns.Count
Range("B3").Select
j =3D ActiveCell.Column
For j =3D NbCol To 2 Step -1
Range(j & 3, j & 367).Select
next j

Merci de votre aide.
Cordialement.
Alex

10 réponses

Avatar
bcar
Bonjour,
La ligne
Range(j & 3, j & 367).Select


ne convient pas, il faudrait plutôt quelque chose du genre
Range(Cells(3, j), Cells(367, j).select
En fait, j est un Integer et toi tu essayes de concatener 2 integer "j &
3", ce qui n'a pas de sens.

Pour le range pour faire plus propre je préciserais la feuille concernée
du genre :
Dim sh as worksheet
set sh = thisworkbook.worksheet("Feuil1") ' -- Par exemple
sh.Range(sh.cells(...,...), sh.cells(...,...))
' -- comme ca pas d'ambiguité possible

Pour le reste faire une boucle juste pour sélectionner... (mais
j'imagine que c'est pour l'exemple.

Le 16/07/2010 09:58, Alex a écrit :
Bonjour à tous,

J'essai de faire une boucle, non pas sur des lignes mais des colonnes,
mais je n'y arrive pas. J'ai écrit ceci :

Dim j As Integer
Dim NbCol As Integer

NbCol = Range("B1").CurrentRegion.Columns.Count
Range("B3").Select
j = ActiveCell.Column
For j = NbCol To 2 Step -1
Range(j & 3, j & 367).Select
next j

Merci de votre aide.
Cordialement.
Alex
Avatar
Alex
Bonjour,

Merci de ta réponse. En effet, je n'ai mis qu'une seule ligne de
données de ma boucle, il y a bien évidement d'autres instructions qui
suivent.

Mais il y a un souci dans ta proposition de solution :
Range(Cells(3, j), Cells(367, j).select
En effet, cela ne fonctionne pas ???
Merci de votre aide
Alex
Avatar
Alex
Re :

En fait mon but est de faire faire la somme de mes cellules de couleur
verte par chaque colonne dont voici le code :

Dim j As Integer

Dim NbCol As Integer
Sheets("Planning").Select
NbCol = Range("B1").CurrentRegion.Columns.Count
j = ActiveCell.Columns
For j = NbCol To 2 Step -1
Range((Cells(3, j)), (Cells(367, j))).Select
For Each C In Selection
If C.Interior.ColorIndex = 43 Then
total = total + C.Value
End If
Next C
RangeCells (j,371) = total
Next j

mais ca ne fonctionne toujours pas !!!

Par avance merci de votre aide
Cordialement.
Alex
Avatar
bcar
Pour ce que tu veux faire, je ne vois pas l'intérêt de faire une
sélection. Fait une simple boucle :


dim sh as Worksheet
Dim i, as Long, j as Long
dim nbCol as Long

set sh = Thisworkbook.worksheets("Planning")

' -- pour designer une cellule je prefere utiliser cells
' -- plutôt que range
NbCol = = sh.cells(1, 2).CurrentRegion.Columns.Count
' -- jaurais peut être plutôt fait quelque chose comme
' -- sh.cells(1,2).end(xlright).column
' -- mais je ne sais pas comment sont présentées tes données

' -- ensuite je ferais un for naturel (pas step -1)
' -- a mons avis puisque tu utilise CurrentRegion.Columns.Count
' -- Il faudrait que tu fasses : nbcol + 1
' -- -1 <=> ( +2 (colonne de départ) - 1)
For j = 2 to NbCol
For i = 3 to 367
' -- La je trouve bizarre que tu partes de 3 et pas de 2...
' -- pas besoin de sélection, fais directement
if sh.cells(i, j).interior.colorIndex = 43 then
total = total + sh.cells(i, j)
endif
next i
' -- pourquoi la ligne 371 ???
sh.cells( 371, j ) = total
' -- RangeCells (j,371) ne veut rien dire
next j

Le 16/07/2010 10:31, Alex a écrit :
Re :

En fait mon but est de faire faire la somme de mes cellules de couleur
verte par chaque colonne dont voici le code :

Dim j As Integer

Dim NbCol As Integer
Sheets("Planning").Select
NbCol = Range("B1").CurrentRegion.Columns.Count
j = ActiveCell.Columns
For j = NbCol To 2 Step -1
Range((Cells(3, j)), (Cells(367, j))).Select
For Each C In Selection
If C.Interior.ColorIndex = 43 Then
total = total + C.Value
End If
Next C
RangeCells (j,371) = total
Next j

mais ca ne fonctionne toujours pas !!!

Par avance merci de votre aide
Cordialement.
Alex
Avatar
Alex
Bonjour bcar,

Merci pour ta réponse.
Pourquoi 371 ? parce que c'est la ou je veux que le résultat se mette.
Mon souci est de faire ma selection de plage qui est indispensable
pour faire le calcul de couleur .
La fonction For Each C fonctionne tres bien si je fais un
range("B3:B367).select
mais je ne sais pas comment il faut écrire range (j,3:j,367)
Si tu peux me donner ce scripte je pense que j'aurai résolu le
probleme
Cordialement.
Alex
Avatar
Sam
Bonjour,
J'ai testé ceci, ça fonctionne
Remarque : j'ai rajouté +1 à Nbcol car Nbcol est calculé par rapport à la
zone à partir de B1

Sub boucle()
'
' boucle Macro
' Macro enregistrée le 16/07/2010 par Michel
'
' Touche de raccourci du clavier: Ctrl+w
'
Dim j As Integer
Dim NbCol As Integer
Sheets("Planning").Select
NbCol = Range("B1").CurrentRegion.Columns.Count
For j = NbCol + 1 To 2 Step -1
Total = 0
Range(Cells(3, j), Cells(367, j)).Select
For Each C In Selection
If C.Interior.ColorIndex = 43 Then
Total = Total + C.Value
End If
Next C
Cells(371, j).Value = Total
Cells(371, j).Interior.ColorIndex = 43
Next j
Cells(371, 2).Select
End Sub

Cordialement
Michel dit "Sam"
"Alex" a écrit dans le message de news:

Re :

En fait mon but est de faire faire la somme de mes cellules de couleur
verte par chaque colonne dont voici le code :

Dim j As Integer

Dim NbCol As Integer
Sheets("Planning").Select
NbCol = Range("B1").CurrentRegion.Columns.Count
j = ActiveCell.Columns
For j = NbCol To 2 Step -1
Range((Cells(3, j)), (Cells(367, j))).Select
For Each C In Selection
If C.Interior.ColorIndex = 43 Then
total = total + C.Value
End If
Next C
RangeCells (j,371) = total
Next j

mais ca ne fonctionne toujours pas !!!

Par avance merci de votre aide
Cordialement.
Alex
Avatar
Alex
Merci Sam, tu m'as trouvé la solution, par contre j'ai oté le + 1 du
for j sinon il effectue les calculent sur une colonne vide.
Avatar
bcar
La réponse complète est dans mon message précédent.
La sélection est inutile.
range (j,3:j,367) doit s'écrire range(cells(j,3),cells(j,367))

Le 16/07/2010 14:22, Alex a écrit :
Bonjour bcar,

Merci pour ta réponse.
Pourquoi 371 ? parce que c'est la ou je veux que le résultat se mette.
Mon souci est de faire ma selection de plage qui est indispensable
pour faire le calcul de couleur .
La fonction For Each C fonctionne tres bien si je fais un
range("B3:B367).select
mais je ne sais pas comment il faut écrire range (j,3:j,367)
Si tu peux me donner ce scripte je pense que j'aurai résolu le
probleme
Cordialement.
Alex
Avatar
Sam
Bonjour,
comme l'a précisé Bcar
tu peux supprimer la selection de la colonne (gain de temps)

Dim j As Integer
Dim Total As Double
Dim NbCol As Integer
Sheets("Planning").Select
NbCol = Range("B1").CurrentRegion.Columns.Count
For j = NbCol + 1 To 2 Step -1
Total = 0
For Each C In Range(Cells(3, j), Cells(367, j))
If C.Interior.ColorIndex = 43 Then
Total = Total + C.Value
End If
Next C
Cells(371, j).Value = Total
Next j

Cells(371, 2).Select
'ça c'est pour vérifier que ça marche
End Sub


Cordialement
Michel dit "Sam"
"Alex" a écrit dans le message de news:



Merci Sam, tu m'as trouvé la solution, par contre j'ai oté le + 1 du
for j sinon il effectue les calculent sur une colonne vide.
Avatar
Alex
Merci à vous deux pour vos réponses et solutions que j'ai mis en
application, et qui me permet de continuer et de finaliser ce projet.
Alex