Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Adaptation code VBA

6 réponses
Avatar
Bruno
Bonjour,

J'ai trouvé une macro qui correspond à un de mes besoins, maios je souhaite
l'adapter. Ci-dessous le code de la maro à adapter :
Sub ColorEverySecondRow()
Const Gray = 15
Range("A2").EntireRow.Select
Do While ActiveCell.Value <> ""
Selection.Interior.ColorIndex = Gray
ActiveCell.Offset(2,0).EntireRow.Select
Loop
End Sub

Comment faire pour ne selectionner la ligne que jusqu'à la dernière colonne
active (exemple colonne AB), et non pas toute la ligne (Entirerow) ?
Merci de vos réponses,

Cordialement,
Bruno

6 réponses

Avatar
michdenis
Sub test()
Const Gray = 15
Dim R As Range, Rg As Range
Dim DerCol As Integer, DerLig As Long
Application.ScreenUpdating = False
With Feuil1 'Adapte le nom de la feuille
'Trouve la dernière ligne occupée
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
'Trouve la dernière colonne occupée
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

Set Rg = .Range("A2:" & .Cells(DerLig, DerCol).Address)
For Each R In Rg.Rows
'Pour colorer à partir de la ligne 2 inclus
'sinon utilise <> débute en ligne 3
If R.Row Mod 2 = 0 Then
R.Interior.ColorIndex = Gray
End If
Next
End With
End Sub





"Bruno" a écrit dans le message de news:

Bonjour,

J'ai trouvé une macro qui correspond à un de mes besoins, maios je souhaite
l'adapter. Ci-dessous le code de la maro à adapter :
Sub ColorEverySecondRow()
Const Gray = 15
Range("A2").EntireRow.Select
Do While ActiveCell.Value <> ""
Selection.Interior.ColorIndex = Gray
ActiveCell.Offset(2,0).EntireRow.Select
Loop
End Sub

Comment faire pour ne selectionner la ligne que jusqu'à la dernière colonne
active (exemple colonne AB), et non pas toute la ligne (Entirerow) ?
Merci de vos réponses,

Cordialement,
Bruno
Avatar
Bruno
Merci, ça marche !
Peux tu m'aider à comprendre la syntaxe de ta modification au code présenté ?
mille mercis d'avance,
Bruno

"michdenis" a écrit :

Sub test()
Const Gray = 15
Dim R As Range, Rg As Range
Dim DerCol As Integer, DerLig As Long
Application.ScreenUpdating = False
With Feuil1 'Adapte le nom de la feuille
'Trouve la dernière ligne occupée
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
'Trouve la dernière colonne occupée
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

Set Rg = .Range("A2:" & .Cells(DerLig, DerCol).Address)
For Each R In Rg.Rows
'Pour colorer à partir de la ligne 2 inclus
'sinon utilise <> débute en ligne 3
If R.Row Mod 2 = 0 Then
R.Interior.ColorIndex = Gray
End If
Next
End With
End Sub





"Bruno" a écrit dans le message de news:

Bonjour,

J'ai trouvé une macro qui correspond à un de mes besoins, maios je souhaite
l'adapter. Ci-dessous le code de la maro à adapter :
Sub ColorEverySecondRow()
Const Gray = 15
Range("A2").EntireRow.Select
Do While ActiveCell.Value <> ""
Selection.Interior.ColorIndex = Gray
ActiveCell.Offset(2,0).EntireRow.Select
Loop
End Sub

Comment faire pour ne selectionner la ligne que jusqu'à la dernière colonne
active (exemple colonne AB), et non pas toute la ligne (Entirerow) ?
Merci de vos réponses,

Cordialement,
Bruno





Avatar
michdenis
Sub test()
Const Gray = 15

'Déclaration des variables
Dim R As Range, Rg As Range
Dim DerCol As Integer, DerLig As Long

'Cela empêche le rafraichissement de l'écran
'à chaque fois qu'il y a une modification (couleur)
Application.ScreenUpdating = False

With Feuil1 'Adapte le nom de la feuille
'Trouve la dernière ligne occupée dans la feuille
'La variable DerCol contient le numéro de cette colonne
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column

'Trouve la dernière colonne occupée dans la feuille
'la variable DerLig contient le numéro de la ligne
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

'Utilise une variable objet Range pour contenir toute la
'Plage de cellules de la feuille
Set Rg = .Range("A2:" & .Cells(DerLig, DerCol).Address)

'Boucle sur chacune des lignes définies de la plage
'pour chaque ligne contenu dans la plage
For Each R In Rg.Rows
'Pour colorer à partir de la ligne 2 inclus
'sinon utilise <> débute en ligne 3
'Utilisation de la fonction "Mod" pour détermner
'Les lignes ayant un numéro pair
If R.Row Mod 2 = 0 Then
'Si le numéro de la ligne est pair, coloration de celle-ci
R.Interior.ColorIndex = Gray
End If
Next
End With
End Sub
Avatar
Bruno
Merci,
Si je comprends bien, les variables sont dénommées par le developpeur comme
il le soihaite, un peu comme les noms dans excel ?
DerLig et DerCol ne sont pas des notions VBA, mais des noms affectés par le
developpeur à une notion qu'il précise par ailleurs :
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column ? est-ce cela ?



Par ailleurs, pourquoi R et Rg ?

Mille mercis
Bruno


"michdenis" a écrit :

Sub test()
Const Gray = 15

'Déclaration des variables
Dim R As Range, Rg As Range
Dim DerCol As Integer, DerLig As Long

'Cela empêche le rafraichissement de l'écran
'à chaque fois qu'il y a une modification (couleur)
Application.ScreenUpdating = False

With Feuil1 'Adapte le nom de la feuille
'Trouve la dernière ligne occupée dans la feuille
'La variable DerCol contient le numéro de cette colonne
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column

'Trouve la dernière colonne occupée dans la feuille
'la variable DerLig contient le numéro de la ligne
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

'Utilise une variable objet Range pour contenir toute la
'Plage de cellules de la feuille
Set Rg = .Range("A2:" & .Cells(DerLig, DerCol).Address)

'Boucle sur chacune des lignes définies de la plage
'pour chaque ligne contenu dans la plage
For Each R In Rg.Rows
'Pour colorer à partir de la ligne 2 inclus
'sinon utilise <> débute en ligne 3
'Utilisation de la fonction "Mod" pour détermner
'Les lignes ayant un numéro pair
If R.Row Mod 2 = 0 Then
'Si le numéro de la ligne est pair, coloration de celle-ci
R.Interior.ColorIndex = Gray
End If
Next
End With
End Sub




Avatar
michdenis
Dans la déclaration d'une variable, tu peux utiliser
une chaine de 1 à 255 caractères.
Effectivement, c'est le développeur qui détermine
le nom des variables.

| Par ailleurs, pourquoi R et Rg ?

Ce sont aussi des variables "OBJET".

En fait, j'aurais pu écrire :
For each R in .Range("A2:" & .Cells(DerLig, DerCol).Address)

Mais pour éviter à excel de devoir évaluer 50, 500 ou 5000
la ligne .Range("A2:" & .Cells(DerLig, DerCol).Address)
selon le nombre de ligne de ton classeur, j'affecte à une
variable "Objet" Rg la plage de cellules.
N.B- L'affectation à une variable objet se fait à l'aide du
petit mot "SET"
Enfin R représente une plage de cellules. Dans la boucle
for each R in Rg.Rows
R représente une ligne complète de la plage Rg et non
une ligne entière de la feuille.
Rg.Rows signifie toute la collection de toutes les lignes
de la plage Rg tel que définie antérieurement.





"Bruno" a écrit dans le message de news:

Merci,
Si je comprends bien, les variables sont dénommées par le developpeur comme
il le soihaite, un peu comme les noms dans excel ?
DerLig et DerCol ne sont pas des notions VBA, mais des noms affectés par le
developpeur à une notion qu'il précise par ailleurs :
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column ? est-ce cela ?



Par ailleurs, pourquoi R et Rg ?

Mille mercis
Bruno


"michdenis" a écrit :

Sub test()
Const Gray = 15

'Déclaration des variables
Dim R As Range, Rg As Range
Dim DerCol As Integer, DerLig As Long

'Cela empêche le rafraichissement de l'écran
'à chaque fois qu'il y a une modification (couleur)
Application.ScreenUpdating = False

With Feuil1 'Adapte le nom de la feuille
'Trouve la dernière ligne occupée dans la feuille
'La variable DerCol contient le numéro de cette colonne
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column

'Trouve la dernière colonne occupée dans la feuille
'la variable DerLig contient le numéro de la ligne
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

'Utilise une variable objet Range pour contenir toute la
'Plage de cellules de la feuille
Set Rg = .Range("A2:" & .Cells(DerLig, DerCol).Address)

'Boucle sur chacune des lignes définies de la plage
'pour chaque ligne contenu dans la plage
For Each R In Rg.Rows
'Pour colorer à partir de la ligne 2 inclus
'sinon utilise <> débute en ligne 3
'Utilisation de la fonction "Mod" pour détermner
'Les lignes ayant un numéro pair
If R.Row Mod 2 = 0 Then
'Si le numéro de la ligne est pair, coloration de celle-ci
R.Interior.ColorIndex = Gray
End If
Next
End With
End Sub




Avatar
Bruno
Ok, merci de ta patience.
Cordialement,
Bruno


"michdenis" a écrit :

Dans la déclaration d'une variable, tu peux utiliser
une chaine de 1 à 255 caractères.
Effectivement, c'est le développeur qui détermine
le nom des variables.

| Par ailleurs, pourquoi R et Rg ?

Ce sont aussi des variables "OBJET".

En fait, j'aurais pu écrire :
For each R in .Range("A2:" & .Cells(DerLig, DerCol).Address)

Mais pour éviter à excel de devoir évaluer 50, 500 ou 5000
la ligne .Range("A2:" & .Cells(DerLig, DerCol).Address)
selon le nombre de ligne de ton classeur, j'affecte à une
variable "Objet" Rg la plage de cellules.
N.B- L'affectation à une variable objet se fait à l'aide du
petit mot "SET"
Enfin R représente une plage de cellules. Dans la boucle
for each R in Rg.Rows
R représente une ligne complète de la plage Rg et non
une ligne entière de la feuille.
Rg.Rows signifie toute la collection de toutes les lignes
de la plage Rg tel que définie antérieurement.





"Bruno" a écrit dans le message de news:

Merci,
Si je comprends bien, les variables sont dénommées par le developpeur comme
il le soihaite, un peu comme les noms dans excel ?
DerLig et DerCol ne sont pas des notions VBA, mais des noms affectés par le
developpeur à une notion qu'il précise par ailleurs :
DerCol = .Cells.Find(What:="*", _
> LookIn:=xlFormulas, _
> SearchOrder:=xlByColumns, _
> SearchDirection:=xlPrevious).Column ? est-ce cela ?

Par ailleurs, pourquoi R et Rg ?

Mille mercis
Bruno


"michdenis" a écrit :

> Sub test()
> Const Gray = 15
>
> 'Déclaration des variables
> Dim R As Range, Rg As Range
> Dim DerCol As Integer, DerLig As Long
>
> 'Cela empêche le rafraichissement de l'écran
> 'à chaque fois qu'il y a une modification (couleur)
> Application.ScreenUpdating = False
>
> With Feuil1 'Adapte le nom de la feuille
> 'Trouve la dernière ligne occupée dans la feuille
> 'La variable DerCol contient le numéro de cette colonne
> DerCol = .Cells.Find(What:="*", _
> LookIn:=xlFormulas, _
> SearchOrder:=xlByColumns, _
> SearchDirection:=xlPrevious).Column
>
> 'Trouve la dernière colonne occupée dans la feuille
> 'la variable DerLig contient le numéro de la ligne
> DerLig = .Cells.Find(What:="*", _
> LookIn:=xlFormulas, _
> SearchOrder:=xlByRows, _
> SearchDirection:=xlPrevious).Row
>
> 'Utilise une variable objet Range pour contenir toute la
> 'Plage de cellules de la feuille
> Set Rg = .Range("A2:" & .Cells(DerLig, DerCol).Address)
>
> 'Boucle sur chacune des lignes définies de la plage
> 'pour chaque ligne contenu dans la plage
> For Each R In Rg.Rows
> 'Pour colorer à partir de la ligne 2 inclus
> 'sinon utilise <> débute en ligne 3
> 'Utilisation de la fonction "Mod" pour détermner
> 'Les lignes ayant un numéro pair
> If R.Row Mod 2 = 0 Then
> 'Si le numéro de la ligne est pair, coloration de celle-ci
> R.Interior.ColorIndex = Gray
> End If
> Next
> End With
> End Sub
>
>