DélimiterPlageCelluleDansMacro

  • Initiateur de la discussion Moa
  • Date de début
M

Moa

Guest
Salut !

Voilà, j'ai une macro qui ne s'applique qu'à une plage de cellule.

En fait pour faire ça, j'ai appliqué la formule suivante :

If ActiveCell.Interior.ColorIndex = 36 Then

bla bla bla...................

Mais mon problème est que j'ai d'autres cellules avec cette couleur, dans ma feuille, donc je doit limiter ma macro, à cette plage de cellule d'une autre manière.

J'ai cherché du côté de : For each cells...mais je n'y arrive pas.

Si qqn a une idée, gros merci d'avance.

@ +

Moa
 
M

Mytå

Guest
Bonsoir le forum

Essaye ceci Moa

Option Explicit
Sub essai()
Dim cellule As Range
For Each cellule In Range("B1:D13")
If cellule.Interior.ColorIndex = 36 Then
'bla bla bla...
cellule.Interior.ColorIndex = 6
End If
Next cellule
End Sub

smiley_417.gif
 
@

@Christophe@

Guest
Bonjour forum

Moa, essaye cela


Sub couleur()
Dim Cell As Range
Dim MaPlage As Range

Set MaPlage = Range("A1:A10")

For Each Cell In MaPlage
If Cell.Interior.ColorIndex = 3 Then
Cell.Offset(0, 1).Interior.ColorIndex = 8
End If
Next Cell
End Sub


@Christophe@
 
M

Moa

Guest
Salut les gars :

Je n'arrive pas à adapter vos macros. (Faut savoir que Vba et moi...héhé !! on est pas très copain....hihihi...)

Donc je vous donne ma macro d'origine :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next

If ActiveCell.Interior.ColorIndex = 36 Then

If ActiveCell.Value = "" Then
ActiveCell.Value = "L"

ElseIf ActiveCell.Value = "L" Then
ActiveCell.Value = "P"

ElseIf ActiveCell.Value = "P" Then
ActiveCell.Value = "S"
ElseIf ActiveCell.Value = "S" Then
ActiveCell.Value = ""
End If


'End If

Cancel = True

End Sub
For Each cellule In Range("FR2:FT14")
Next cellule
 
M

Moa

Guest
Non Non et non Pu.... de Cla...j'ai pas fini :

Voici la vraie macro d'origine


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next

If ActiveCell.Interior.ColorIndex = 36 Then

If ActiveCell.Value = "" Then
ActiveCell.Value = "L"

ElseIf ActiveCell.Value = "L" Then
ActiveCell.Value = "P"

ElseIf ActiveCell.Value = "P" Then
ActiveCell.Value = "S"

ElseIf ActiveCell.Value = "S" Then
ActiveCell.Value = ""
End If

End If

Cancel = True

End Sub

Donc en fait le subterfuge utilisé est le "interior.ColorIndex..blabla"

Mais en réalité je ne veux plus parler de couleur dans ma macro, je voudrais parler directement de plage :

Aussi j'ai éssayé en remplaçant par :

For Each cellule In Range("FR2:FT14")
Next cellule

Et la ça marche, mais trop bien puisque c'est opérationnel sur tout la feuille.

En fait il faut qu'en double cliquant, sur les cellules de mon tableau, ma macro fonctionne, mais que pour ce tableau, car cette feuille et déjà pleine d'autre tableaux, formules et macros.

Ma macro actuelle fonctionne très bien, mais j'ai d'autres tableaux avec la même couleur, donc je ne peux plus utiliser cette formule.

Voilà j'espère avoir été assez clair et encore merci beaucoup les gars.

@ +

Moa
 
A

A_binouze_drinker_among_others

Guest
bonjour

et celà ?

if Not Intersect(Target, range("tontableau")) Is Nothing then
if ActiveCell.Interior.ColorIndex=36 then
select case target.value
case "" :val="L"
case "L":val="P"
case "P":val="S"
case "S":val=""
case else
end select
target.value=val
end if
end if
cancel=true
 
M

Moa

Guest
Re-Salut !

Donc, Binouze ta dernière solution ne fonctionne pas non plus, mais par contre, j'ai piqué seulement :

If Not Intersect(Target, Range("FR2:FT14")) Is Nothing Then

Que j'ai rajouté au début de la macro, j'ai supprimé la partie "ColorIndex" et là, ça marche très bien.

Donc, voici la macro finale :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next

If Not Intersect(Target, Range("FR2:FT14")) Is Nothing Then

If ActiveCell.Value = "" Then
ActiveCell.Value = "L"
ElseIf ActiveCell.Value = "X" Then
ActiveCell.Value = "L"
ElseIf ActiveCell.Value = "L" Then
ActiveCell.Value = "P"
ElseIf ActiveCell.Value = "P" Then
ActiveCell.Value = "S"
ElseIf ActiveCell.Value = "S" Then
ActiveCell.Value = ""
End If

Cancel = True
End If
End Sub

Encore plein de gros merci à vous les gars.

Bonne fin de journée.

@ +

Moa
 
A

A_binouze_drinker_among_others

Guest
exemple joint, en suposnat que une plage a été nommée tableau
 

Pièces jointes

  • Classeur1.xls
    23.5 KB · Affichages: 66
  • Classeur1.xls
    23.5 KB · Affichages: 69
  • Classeur1.xls
    23.5 KB · Affichages: 72

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87