GarderUneSérieCelluleSelectionnées

M

Moa

Guest
Salut à tous !

Dans une grande macro, j'ai une boucle qui effectue des opérations dans des cellules, tel que :

Macro allégée :

With Range(A1:G24)
For i = 0 To 2 Step 2
For j = 0 To 2 Step 2
.Cells(j + 1, i + 1).Select
Selection.Interior.ColorIndex = Couleur
Next j
Next i
End With

On voit bien que ma boucle sélectionne chaque cellule concernée y applique un format et passe à la suivante.

Mais je voudrais changer cette macro pour qu'au lieu d'y effectuer une action, elle se contente simplement de me sélectionner les cellules.

J'ai donc essayé en supprimant " Selection.Interior.ColorIndex = Couleur", mais je me retrouve qu'avec la dernière cellule sélectionnée.

J'ai essayé en créant une variable plage et en incrémentant cette variable avec ma boucle, mais trop complexe pour moi.

J'ai donc essayé en combinant For each cell in Selection + For i etc...pas moyen.

Donc, si mes Maîtres Xldiens pouvaient me mettre sur la voie, ce seraient vraiment très très cool.

Merci d'avance et bonne nuit à tous !

@ +

Moa
 
M

Moa

Guest
Salut Myta !

J'ai trouvé une solution, mais elle a un inconvénient, elle est limitée :

With Range(A1)
For i = 0 To 2 Step 2
For j = 0 To 2 Step 2
.Cells(j + 1, i + 1).Select
plage = plage & ActiveCell.Address(0, 0) & ","
Next j
Next i
End With
Range(Left(plage, Len(plage) - 1)).Select
End Sub

En fait, je ne sais pas pourquoi, mais si ma plage dépasse 75 cellules Sélectionnées, il y a Bug sur la ligne :

Range(Left(plage, Len(plage) - 1)).Select

Si tu as une idée.....!!!


Merci à toi et bonne journée.

@ +

Moa
 
W

wally

Guest
Bonjour Moa et le forum,

Essaye avec la méthode Union :

Dim plage As Range

For i = 0 To 20 Step 2
For j = 0 To 20 Step 2
If plage Is Nothing Then
Set plage = Cells(j + 1, i + 1)
Else
Set plage = Union(plage, Cells(j + 1, i + 1))
End If
Next j
Next i
plage.Select


Slts

wally
 
M

Moa

Guest
Salut Wally !

Ta macro fonctionne parfaitement, et je peux selectionner plus de 500 cellules à la fois.

Cependant, il y a un hic...Héhé....!!!

La sélection part toujours de A1.

J'ai donc rajouté un With Range, mais elle n'en tient pas compte.

J'ai essayé plusieurs code..pas moyen...

Décidement, Vba et moi on est juste copain, pas encore ami...

Merci de ton attention.

@ +

Moa
 
W

wally

Guest
Re Moa et le forum,

Par exemple, pour faire partir la sélection de C5 :

Dim plage As Range, plagedepart As Range

Set plagedepart = Range("C5")

For i = 0 To 20 Step 2
For j = 0 To 20 Step 2
If plage Is Nothing Then
Set plage = plagedepart
Else
Set plage = Union(plage, plagedepart.Offset(j, i))
End If
Next j
Next i
plage.Select


Slts

wally
 
M

Moa

Guest
Salut Wally !

Merci beaucoup ça marche impec !

Maintenant, faut que je modifie toutes les autres macros qui étaient construitent sur ma première base.

Et là, ça va être un peu plus coton....!

Je t'en donne un exemple :

With Range(Debut)
For i = 0 To Fincol
For j = 0 To FinLig
.Cells(j + 1, i + 1).Select
If UserForm1.OptionButton11 = True Then
TestActiveCell = ActiveCell > ValeurUn
End If
If IsNumeric(ActiveCell) And ActiveCell <> "" And TestActiveCell Then
Plage = Plage & ActiveCell.Address(0, 0) & ","
End If
Next j
Next i
End With

If Len(Plage) > 0 Then Range(Left(Plage, Len(Plage) - 1)).Select Else MsgBox "Pas de Valeur Trouvée !"
End Sub

Comment adapter ta macro à ce cas ?

Cela fait une heure que j'éssaie de l'adapter et pas évident du tout...

Gros merci à toi de ton aide précieuse.

@ +

Moa
 
W

wally

Guest
Bonjour Moa et le forum,

Essaye ceci :

Dim Plage As Range

With Range(debut)
For i = 0 To fincol
For j = 0 To finlig
.Cells(j + 1, i + 1).Select
If UserForm1.OptionButton11 = True Then
TestActiveCell = ActiveCell > ValeurUn
End If
If IsNumeric(ActiveCell) And ActiveCell <> "" And TestActiveCell Then
If Plage Is Nothing Then
Set Plage = ActiveCell
Else
Set Plage = Union(Plage, ActiveCell)
End If
End If
Next j
Next i
End With

If Not Plage Is Nothing Then Plage.Select Else MsgBox "Pas de Valeur Trouvée !"


Slts

wally
 
M

Moa

Guest
Re Wally !

Merci t'es un super chef....Smack..smack....smack..!!

J'avais pratiquement fait la même chose, mais à chaque fois, soit il n'y avait pas d'erreur, mais la sélection était mauvaise, soit j'avais une erreur sur le "Union".

Maintenant, je vais rajouter toutes les options, car en fait, j'ai une dizaine d'OptionButton et des variables pour les valeurs.

Hier soir, jai lu le bouquin Excel et Vba pendant plus de deux heures, pour trouver la faille est pas moyen..enfin bref...

Tout ça me fait penser que l'on devrait faire une FAQ sur les boucles.

Je te tiendrai au courant de la suite du projet.

Encore mille mercis à toi.

Bonne soirée

@ +

Moa
 

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 352
Membres
103 824
dernier inscrit
frederic.marien@proximus.