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

Le
Alex
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
bcar
Le #22361761
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
Alex
Le #22361751
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
Alex
Le #22361801
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
bcar
Le #22362681
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
Alex
Le #22362841
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
Sam
Le #22362831
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"
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
Alex
Le #22362901
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.
bcar
Le #22362891
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
Sam
Le #22363421
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"


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.
Alex
Le #22366861
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
Publicité
Poster une réponse
Anonyme