ProblèmeAvecRange(Selection...

M

Moa

Guest
Salut à tous !

Voilà, j'ai fait une petite macro que me cherche les lignes où se trouve le chiffre "1", et me modifie le format des cellules correspondantes :

Sub TestTraitAvecUn()
Dim Cellule As Range
For Each Cellule In Range("G5:G562")
If Cellule.Value = 1 Then
Selection.Borders(xlEdgeBottom).Weight = xlThin
End If
Next Cellule
End Sub

Elle fonctionne très bien, mais je voudrais maintenant que les les cellules de la même ligne, mais à gauche prennent aussi le même format.

J'ai donc écrit :

Sub TestTraitAvecUn()
Dim Cellule As Range
For Each Cellule In Range("G5:G562")
If Cellule.Value = 1 Then
Range(Selection, Selection.End(xlToLeft)).Select
Selection.Borders(xlEdgeBottom).Weight = xlThin
End If
Next Cellule
End Sub

Et là ça ne marche pas.

J'ai essayé avec ActiveCell.offset(0,-1).Select, puis (0,-2) etc...

Mais idem, la macro s'arrête à l'endroit de mon curseur.

Si quelqu'un a une idée.

Merci d'avance...les p'tits gars...!

@ +

Moa
 
L

LaurentTBT

Guest
Salut Moa,

Essayes ceci:

Sub TestTraitAvecUn()
Dim Cellule As Range
For Each Cellule In Range("G5:G562")
If Cellule.Value = 1 Then
Cellule.EntireRow.Range("A1:G1").Borders(xlEdgeBottom).Weight = xlThin
End If
Next Cellule
End Sub

@+
Laurent
 
M

Moa

Guest
Merci LaurentTBT !

Ca marche très bien.

En fait, j'avais abrégé ma macro, qui change plusieurs formats de cellules, et pour cette option j'ai donc réduit (A1:G1) à (B1:G1).

Et c'est le résultat voulu....Impec.

Mais voilà, pour afficher ce "1" caché en dehors de mon tableau, j'avais mis des formules sur tout le long de mon tableau (500 lignes).

Et je cherche à faire maintenant une macro pour remplacer ces formules.

Voilà ma formule : SI(F5<>F6;1;""), puis dans la celule du dessous :SI(F6<>F7;1;"") etc... .

Il faut donc que je compare chaque cellule de la colonne G avec la précédente, et si le résultat est différent, alors écrire 1, dans la cellule, juste à droite.

Et honnêtement, j'y ai déjà passé plus de 4 heures depuis hier..et naturellement sans avancer...

Parce que les bouquins..ça oublient pas mal de choses....!

Gros merci à toi pour ta première réponse et si quelqu'un avait un fil pour la seconde ce serait vraiment génial.

@ +

Moa
 
M

Moa

Guest
Ouf...!!!!

J'ai trouvé, avec le bouquin....mais quelle galère !

Sub LesUns()
Dim cellulecourante As Range
Dim cellulesuivante As Range
Set cellulecourante = ActiveSheet.Range("F5")

Do While Not IsEmpty(cellulecourante) = True
Set cellulesuivante = cellulecourante.Offset(1, 0)

If cellulecourante.Value <> cellulesuivante.Value Then
cellulecourante.Interior.ColorIndex = 6
End If
Set cellulecourante = cellulesuivante
Loop
End Sub

Bon maintenant, faut que je rajoute le début et la fin.

@ +

Moa
 
L

LaurentTBT

Guest
Re salut, Moa.

J'ai pensé: tu peux passer par une mise en forme conditionnelle, cela évitera de te faire passer par la colonne cachée qui affiche les 1:

1- Sélectionne les cellules A6 à F6
2- Mise en forme conditionnelle avec "la formule est" =$F6<>$F5
(attention, l'absence de $ devant le chiffre est primordiale!
3- Copie ces mêmes cellules
4- collage spécial option Formats en ayant sélectionné A7:G500.

Voilà, c'était juste une idée en passant.

Bonne soirée.
Laurent.
 
M

Moa

Guest
Salut LaurentTBT !

Merci, c'est sympa de t'interesser à mon problème.

Mais en fait, c'est comme ça que j'ai commencé, avec une mise en forme conditionnelle.

Mais il se trouve que c'est plus complexe que cela.

Et la question présente ne portait que sur une partie de ma macro complète.

Mais j'avais déjà fait tout le reste, et ce format conditionnel, ainsi que des formules intermédiaires, me faisaient grossir mon fichier.

Je cherchais donc à réduire la taille de mon fichier.


Voilà, LaurentTBT, encore mille gros mercis à toi.


@ +

Moa
 

Discussions similaires

Réponses
21
Affichages
308