For each avec cellules sélectionnées Ctrl+clic
Bonjour,
Voila je voudrais savoir comment appliquer une macro qui se lance l'une après l'autre (peu importe l'ordre). Ci-dessous un exemple simplifié. Je voudrais que la macro applique le code une case après l'autre et pas tout en même temps. Il me semble qu'un for each est le plus adapté mais je ne maîtrise pas. J'aurais donc besoin de l'initialisation du code ainsi que la fin (Next ???)
Merci
Bonsoir,
je ne comprend pas...
@ bientôt
LouReeD
Bonjour,
Quelque chose qui ressemblerait à ça :
Sub Test2()
Dim c As Range
For Each c In Range("A1:H10")
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Next
End Sub
Mais je voudrais juste appliquer le code simplement aux cellules sélectionnées sur la plage A10:H10
Dim cellule As Range
For Each cellule In Selection
.........Code.........
Next cellule
genre ça, mais ça marche pas :'(
Bonjour Yonik, LouReeD,
En retour le code ci-dessous.
Sub Kolor()
'Les cellules à colorier devront être sélectionnés avant
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535 ' Raz par xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Attention, ne pas appliquer si aucune cellule en sélection. Sinon c'est toute la feuille que tu vas colorier.
Ce n'est pas ça, le code est plus compliqué que ça. La première boucle marche mais pas la deuxième. Chaque sélection doit s'effectuer l'une après l'autre en gardant en mémoire les sélections initiales. Le problème c'est qu'au cours de la première macro, les sélections sont changées.
Sub liquides()
Application.ScreenUpdating = False
ActiveCell.Copy
Workbooks.Open Filename:= _
"P:\Magasin\Commun\Ordonnancement\Saison 2020\Ordres de fabrication\OF Conditionneuses.xlsm"
Sheets("OF ESCALQUENS").Activate
Range("C6").Select
ActiveSheet.Paste
Range("T6:V6").Value = "LIQUIDES"
'---------------------------- destination ----------------------------
Windows("Planning").Activate
ActiveCell.Offset(0, 2).Select
If ActiveCell.Value = "PAL" Then
Windows("OF Conditionneuses").Activate
Sheets("OF ESCALQUENS").Activate
Range("T11:V11").Value = "PALETTE BOIS"
End If
If ActiveCell.Value = "BOX" Then
Windows("OF Conditionneuses").Activate
Sheets("OF ESCALQUENS").Activate
Range("T11:V11").Value = "BOX PLASTIQUE"
End If
If ActiveCell.Value = "UN" Then
Windows("OF Conditionneuses").Activate
Sheets("OF ESCALQUENS").Activate
Range("T11:V11").Value = "UNITE"
End If
'---------------------------- l'unité ----------------------------
Windows("Planning").Activate
ActiveCell.Offset(0, -1).Select
Selection.Copy
Windows("OF Conditionneuses").Activate
Sheets("OF ESCALQUENS").Activate
Range("C11").Select
ActiveSheet.Paste
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
'---------------------------- la quantité ----------------------------
Application.Run "'OF Conditionneuses.xlsm'!extract"
'---------------------------- extract des composants ----------------------------
Range("U10:V10").Select
ActiveCell.FormulaR1C1 = "=R[1]C[-18]*R[34]C[-15]"
'---------------------------- nombre bidons ----------------------------
Windows("Planning").Activate
Do While ActiveCell.Value < 3000
ActiveCell.Offset(-1, 0).Select
Loop
ActiveCell.Offset(-1, 0).Select
Selection.Copy
Windows("OF Conditionneuses").Activate
Sheets("OF ESCALQUENS").Activate
Range("S12").Select
ActiveSheet.Paste
Range("S12:V12").Select
Selection.NumberFormat = "m/d/yyyy"
With Selection.Font
.Name = "Calibri"
.Size = 16
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
Application.Run "'OF Conditionneuses.xlsm'!Bouton1807_Cliquer"
'---------------------------- date ----------------------------
Windows("OF Conditionneuses.xlsm").Activate
ActiveWorkbook.Save
ActiveWindow.Close
'---------------------------- ferme ----------------------------
End Sub
Bonjour,
je pars de l'exemple réduit :
Dim c As Range
For Each c In Selection
With c.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Next
eric
PS : et si tu veux mémoriser ta sélection au départ :
Dim pl As Range
Set pl = Selection
et il faut se passer de tous les .Select inutiles (soit 99%). Et si possible ne pas travailler avec ActiveCell
Par exemple, ne pas écrire :
c.Offset(0, 2).Select
With ActiveCell
'...
End With
mais :
With c.Offset(0, 2)
'...
End With
Merci de ta réponse mais je ne pense pas pouvoir l'exploiter correctement :/
Tu aurais moyen de m'expliquer ça : Dim pl As Range Set pl = Selection ? je l'ai mis au début mais le pb persiste :/
Ainsi que la bonne façon d'écrire "activecell". Je comprendrais mieux avec un exemple ^^
Le problème c'est que tu voudrais programmer sans avoir acquis les bases.
Donc forcément même les réponses te paraissent obscures.
Quant à mettre un exemple pour ActiveCell il me semble que c'est ce que j'ai fait.
Donc laisse tomber la fin de mon post et concentre-toi sur le 1er code jusqu'à ce que tu le comprennes.
Et prend le temps de parcourir et d'assimiler ça : https://www.excel-pratique.com/fr/formation
eric
A nouveau,
Ce n'est pas ça, le code est plus compliqué que ça. La première boucle marche mais pas la deuxième.
La macro Kolor est à rappeler chaque fois que tu changes de groupe de cellules sélectionnées.
Si en 1ière boucle c'est B1, C2, D1 qui est en sélection alors faire une Call Kolor pour que le code colore ta sélection.
Si en 2ième boucle c'est B2, C3, D2 qui se trouve en sélection alors faire de nouveau appel par Call Kolor pour colorer cette sélection. Etc....
Chaque fois que tu as un groupe de cellules sélectionnées tu appliques ainsi la couleur. Une fois que celles ci sont teintes il n' y a pas besoin qu'elles restent en sélection.
C'est du travail à la chaine... Comme chez F..D quand ils colorent les autos.
Bonsoir …
Il est difficile de trouver une réponse valable sans le contexte. Je ne me suis pas casser la tête à essayer de comprendre le code ci-dessus donc, pour changer la couleur par cellule, je prendrai plutôt une évènementielle* Voilà un exemple de codage avec une plage A10 : H10 , quelques cellules de cette plage concernées par le changement (ici Interior-fond car plus visuel que Font-police pour les contenus Truc, Chose, Machin) et même un roulement sur 3 couleurs ; Dans la fenêtre des codes de la feuille en jeu :
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, [A10:H10]) Is Nothing And R.CountLarge = 1 Then
If R = "Truc" Or R = "Chose" Or R = "Machin" Then
Select Case R.Interior.Color 'plus visuel que Font.Color
Case vbWhite: R.Interior.Color = vbYellow
Case vbYellow: R.Interior.Color = vbRed
Case vbRed: R.Interior.Color = vbWhite
End Select
End If
[B10].Select 'une des cellules non concernée pour établir une rotation
End If
End sub
*choix des cellules en premier comme l’a suggéré X cellus
Nota : pour éviter les surcharges, l’encadrement n’est pas traité ici.