Macro dans 2 plages de cellules uniquement

karinette

XLDnaute Occasionnel
Bonsoir à tous ...
Encore un petit soucis à soumettre aux pro du VB :
Voila j'ai une macro qui me me met une valeur et une couleur dans une plage de cellule que je choisis :

Sub client1()
With Selection.Interior
.ColorIndex = Range("listeclient!G3").Value
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 0
Selection.Font.Bold = True
Selection.FormulaR1C1 = Range("listeclient!F3").Value
End Sub


J'aurais voulu limiter l'action à 2 plages de cellules seulement ("G10:X30" et "G40:X120").
J'ai tenté de modifier la macro avec divers exemples, mais sans succès ....

Si quelqu'un peu m'aider .... :eek:
 

job75

XLDnaute Barbatruc
Re : Macro dans 2 plages de cellules uniquement

Bonsoir karinette,

Par exemple, commencez la macro par :

Code:
Dim plage As Range
Set plage = Intersect(Selection, Range("G10:X30,G40:X120"))

puis dessous remplacez partout Selection par plage.

A+
 

karinette

XLDnaute Occasionnel
Re : Macro dans 2 plages de cellules uniquement

C'est exactement ça .... :)
En fait je n'étais pas bien loin (il me manquait le "selection" par "plage").

Par contre, comment eviter le "erreur d'execution" lorsque je suis hors selection ??

L'idéal serais un MsgBox "Plage non valide" (plus sympa)....

Est ce possible ?
 

vbacrumble

XLDnaute Accro
Re : Macro dans 2 plages de cellules uniquement

Bonsoir


Essaie comme cela

Code:
Sub macrotest()
If Not Intersect(ActiveCell, Range("G10:X30,G40:X120")) Is Nothing Then
MsgBox "selection ok"
Else
MsgBox "selection pas ok"
End If
End Sub
 

job75

XLDnaute Barbatruc
Re : Macro dans 2 plages de cellules uniquement

Re, salut vbacrumble,

Par contre, comment eviter le "erreur d'execution" lorsque je suis hors selection ??

Oui j'avais oublié une ligne de test :

Code:
Dim plage As Range
Set plage = Intersect(Selection, Range("G10:X30,G40:X120"))
[COLOR="Red"]If plage Is Nothing Then MsgBox "Plage non valide": Exit Sub[/COLOR]

A+
 

karinette

XLDnaute Occasionnel
Re : Macro dans 2 plages de cellules uniquement

Voila comment je l'ai modifié :

Sub client1()
Dim plage As Range
Set plage = Intersect(Selection, Range("G10:X30,G40:X120"))
If Not Intersect(ActiveCell, Range("G10:X30,G40:X120")) Is Nothing Then
With plage.Interior
.ColorIndex = Range("listeclient!G3").Value
.Pattern = xlSolid
End With
plage.Font.ColorIndex = 0
plage.Font.Bold = True
plage.FormulaR1C1 = Range("listeclient!F3").Value
Else
MsgBox "Mauvaise plage de selection"
End If
End Sub


Merci et bonne soirée ;)
 

vbacrumble

XLDnaute Accro
Re : Macro dans 2 plages de cellules uniquement

Re


Puisque tu aimes les With /End With ;)

Code:
Sub client1()
Dim plage As Range
Set plage = Intersect(ActiveCell, Range("G10:X30,G40:X120"))
If Not Intersect(ActiveCell, Range("G10:X30,G40:X120")) Is Nothing Then
    With plage
    .FormulaR1C1 = Range("listeclient!F3").Value
        With .Interior
            .ColorIndex = Range("listeclient!G3").Value
            .Pattern = xlSolid
        End With
        With .Font
            .ColorIndex = 0
            .Bold = True
        End With
    End With
Else
MsgBox "Mauvaise plage de selection", _
        vbCritical, "Erreur : cellule " _
        & ActiveCell.Address(0, 0) & " invalide."
End If
End Sub
 

job75

XLDnaute Barbatruc
Re : Macro dans 2 plages de cellules uniquement

Re,

Oui, à ceci près qu'avec :

Code:
If Not Intersect(ActiveCell, Range("G10:X30,G40:X120")) Is Nothing Then

seule la cellule active est testée.

De plus ce code est plus compliqué que la solution :

Code:
Dim plage As Range
Set plage = Intersect(Selection, Range("G10:X30,G40:X120"))
If plage Is Nothing Then MsgBox "Plage non valide": Exit Sub

Bonne nuit.
 

vbacrumble

XLDnaute Accro
Re : Macro dans 2 plages de cellules uniquement

Re, bonsoir job75



En acte de pénitence voici

PS: Si on utilise Selection , toutes les cellules prendront la valeur de F3 ?

Code:
Sub client11()
Dim plage As Range
Dim couleur As Range
Set couleur = Sheets("listeclient").[G3]
Set plage = Intersect(Selection, Range("G10:X30,G40:X120"))
If plage Is Nothing Then
MsgBox "Mauvaise plage de selection", vbCritical, "Erreur : Plage " & Selection.Address(0, 0) & " invalide.": Exit Sub
Else
    With plage
    .Value = couleur.Offset(, -1).Value
        With .Interior
        If IsEmpty(couleur) Or Not IsNumeric(couleur) Then Exit Sub
            .ColorIndex = CLng(couleur)
            .Pattern = xlSolid
        End With
        With .Font
            .ColorIndex = 0
            .Bold = True
        End With
    End With
End If
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 320
Messages
2 087 226
Membres
103 497
dernier inscrit
JP9231