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

Lancer une macro dans For each cell

Aucune réponse
Avatar
rmillerlcxl
Bonjour,

Dans un module standard je lance une macro dans un ... For each cell in Ran=
ge("A1:B4").cells...

if ...

Call Pro_MACRO1

Dans Pro_MACRO1 qui est dans un autre module standard ... comment le cell p=
eut =C3=AAtre reconnu?

Je sais qu'avec Target dans un =C3=A9v=C3=A8nement on peut par exemple ... =
Call Pro_MACRO2 (Target) et que le nom de la macro doit alors =C3=AAtre Pro=
_MACRO2 (Target as range)

Merci =C3=A0 l'avance.

10 réponses

Avatar
Michd
Bonjour,
Un petit exemple : À chaque fois que la valeur d'une cellule de la colonne A
change, la macro "MaMacro" est appelée et elle travaille sur ladite cellule.
Tu appliques le code que tu désires. La procédure événementielle
"Worksheet_Change" n'est pas appelée si le changement de valeur dans la
cellule est dû au fait que cette formule contient une formule.
Plus précisément, dès qu'une cellule de la colonne A passe en mode édition
que ce soit suite à un double-clic dans la cellule, l'usage de la touche F2
ou simplement la saisie d'une nouvelle donnée, la procédure événementielle
Worksheet_Change est appelée.
La procédure peut être dans n'importe quel module STANDARD. Si la procédure
est dans un module feuille, tu dois écrire le nom de la feuille (pas le nom
de l'onglet, mais le nom de la propriété "NAME" de la feuille devant le nom
de la macro comme dans cet exemple : Call Feuil1.MaMacro(target). Si tu es
dans cette situation, tu dois spécifier le nom de la feuille. Voir exemple 2
Exemple 1
==================================================== '-----------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Call MaMacro(Target)
End If
End Sub
'-----------------------------------
Sub MaMacro(Rg As Range)
Dim C As Range
For Each C In Rg.Cells
x = C.Value
Next
End Sub
'-----------------------------------
====================================================
Exemple 2
==================================================== Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Call Feuil1.MaMacro(Target.Parent.Name, Target)
End If
End Sub
'-----------------------------------------------------------------------
Sub MaMacro(Feuil As String, Rg As Range)
Dim C As Range
For Each C In Worksheets(Feuil).Range(Rg.Address).Cells
x = C.Value
Next
End Sub
'-----------------------------------------------------------------------
MichD
Avatar
rmillerlcxl
Bonjour,
Merci beaucoup. Je me suis servi de votre exemple dans un évèneme nt Change pour une feuille. Mais je tente d'en faire de même avec un F or each cell. Voir l'exempel ci-dessous. Comment adapter le code ci-dessous afin que cell soit reconnu dans la macro Pro_PRINTCASEPDFINDEX1?
Merci à l'avance.
Sub PRINTCASEPDF()
For Each cell In Activesheet.Range("H11:H234").Cells
If Application.Intersect(cell, ActiveSheet.Range("H50:H200")) Is Nothing Th en
Call Pro_PRINTCASEPDFINDEX1
End If
If Not Application.Intersect(cell, ActiveSheet.Range("H50:H200")) Is Nothin g Then
Call Pro_PRINTCASEPDFINDEX2
End If
Next
Sub Pro_PRINTCASEPDFINDEX1()
If cell.value = 1 then
xxxxxx
End if
end sub
Avatar
Michd
Bonjour,
| If Application.Intersect(cell, ActiveSheet.Range("H50:H200")) Is Nothing
Then
A ) L'expression "Cell" est un mot réservé au langage VBA. Il est toujours
préférable d'utiliser des mots ou expressions qui ne font pas partie du
langage utilisé par Excel. En fait, ce mot désigne une barre de commande
d'Excel.
B ) Exemple :
L'Expression "Selection" désigne une plage de cellule ou tout objet (graphe,
bouton de commande ...) qui est sélectionné.
Par conséquent, la macro fait le test à savoir si "Selection" représente
bien une plage de cellule avec cette ligne de code :
If TypeName(Selection) = "Range" Then
Attention : "Selection" fait référence à une plage de cellules ou un objet
dans la feuille active, celle qui est à l'écran.
'---------------------------------------------------
Sub test()
'Déclaration de la variable
Dim Rg As Range, C As Range
If TypeName(Selection) = "Range" Then
Set Rg = Application.Intersect(Selection, ActiveSheet.Range("H50:H200"))
'Boucle sur chacune des cellules
End if
If Not Rg Is Nothing Then
For Each C In Rg.Cells
MsgBox C.Address
Next
End If
End Sub
'---------------------------------------------------
MichD
Avatar
Cathy Monier
Bonjour,
Comme le dit Michd, n'utilisez pas Cell en tant que variable et modifiez vo tre code ainsi
Sub PRINTCASEPDF()
Dim Cellule as Range
For Each Cellule In Activesheet.Range("H11:H234").Cells
If Cellule.row >P and cellule.row < 0 Then 'si la cellule se situe en lignes 50 à 200
Call Pro_PRINTCASEPDFINDEX2(Cellule)
else
Call Pro_PRINTCASEPDFINDEX1(Cellule)
End If
Next
Sub Pro_PRINTCASEPDFINDEX2 (Cellule as range)
If Cellule .value = 1 then
xxxxxx
End if
end sub
Sub Pro_PRINTCASEPDFINDEX1 (Cellule as range)
xxxxxx
end sub
Avatar
isabelle
bonjour à tous,
il vaut mieux éviter également le mot "cellule"
ce mot employé par MS Excel 4.0
https://www.cjoint.com/c/HAyuK6Don1i
isabelle
Le 2018-01-24 à 11:44, Cathy Monier a écrit :
Bonjour,
Comme le dit Michd, n'utilisez pas Cell en tant que variable et modifiez votre code ainsi
Sub PRINTCASEPDF()
Dim Cellule as Range
For Each Cellule In Activesheet.Range("H11:H234").Cells
If Cellule.row >P and cellule.row < 0 Then 'si la cellule se situe en lignes 50 à 200
Call Pro_PRINTCASEPDFINDEX2(Cellule)
else
Call Pro_PRINTCASEPDFINDEX1(Cellule)
End If
Next
Sub Pro_PRINTCASEPDFINDEX2 (Cellule as range)
If Cellule .value = 1 then
xxxxxx
End if
end sub
Sub Pro_PRINTCASEPDFINDEX1 (Cellule as range)
xxxxxx
end sub
Avatar
Jacquouille
.... et en "cellules", elle s'y entend, notre Isabelle.
Pourquoi ne pas employer "for each c ...." comme beaucoup le font?
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"isabelle" a écrit dans le message de groupe de discussion :
p4aqql$1iem$
bonjour à tous,
il vaut mieux éviter également le mot "cellule"
ce mot employé par MS Excel 4.0
https://www.cjoint.com/c/HAyuK6Don1i
isabelle
Le 2018-01-24 à 11:44, Cathy Monier a écrit :
Bonjour,
Comme le dit Michd, n'utilisez pas Cell en tant que variable et modifiez
votre code ainsi
Sub PRINTCASEPDF()
Dim Cellule as Range
For Each Cellule In Activesheet.Range("H11:H234").Cells
If Cellule.row >P and cellule.row < 0 Then 'si la cellule se situe en
lignes 50 à 200
Call Pro_PRINTCASEPDFINDEX2(Cellule)
else
Call Pro_PRINTCASEPDFINDEX1(Cellule)
End If
Next
Sub Pro_PRINTCASEPDFINDEX2 (Cellule as range)
If Cellule .value = 1 then
xxxxxx
End if
end sub
Sub Pro_PRINTCASEPDFINDEX1 (Cellule as range)
xxxxxx
end sub
Avatar
rmillerlcxl
Merci beaucoup.
J'ai appliqué vos recommandations et cela a réussi.
Avatar
pom...pom...pom..
Ouuupsss... avec un peu de retard
mais en ce jour de St François de Salle :
Septante ???,
vous avez dit : septante !!!
bon zani mon Jacquouille ;-)
"Jacquouille" a écrit dans le message de groupe de discussion :
p4asik$1m35$
.... et en "cellules", elle s'y entend, notre Isabelle.
Pourquoi ne pas employer "for each c ...." comme beaucoup le font?
Jacques
" Le vin est au repas ce que le parfum est à la femme."
Le 2018-01-24 à 11:44, Cathy Monier a écrit :
Avatar
Jacquouille
Pire, mon brave Gilbert, dit Modeste:
c'est la 60-dizaines .....( ça fait un peu Mathusalem....)
PS: Mieux vaut moût tard que jamais....
pense souvent à toi et tes formats.
Amitiés.
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"pom...pom...pom.." a écrit dans le message de groupe de discussion :
p4o052$1ni7$
Ouuupsss... avec un peu de retard
mais en ce jour de St François de Salle :
Septante ???,
vous avez dit : septante !!!
bon zani mon Jacquouille ;-)
"Jacquouille" a écrit dans le message de groupe de discussion :
p4asik$1m35$
.... et en "cellules", elle s'y entend, notre Isabelle.
Pourquoi ne pas employer "for each c ...." comme beaucoup le font?
Jacques
" Le vin est au repas ce que le parfum est à la femme."
Le 2018-01-24 à 11:44, Cathy Monier a écrit :
Avatar
JièL
Bah, ça va encore, même ton (vieil) Excel reste en forme ;-)
Bonnaniv' Jacquouille :-)
--
JièL
Le 30/01/2018 à 13:59, Jacquouille a écrit :
Pire, mon brave Gilbert, dit Modeste:
c'est la 60-dizaines .....( ça fait un peu Mathusalem....)
PS: Mieux vaut moût tard que jamais....
pense souvent à toi et tes formats.
Amitiés.
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"pom...pom...pom.."  a écrit dans le message de groupe de discussion :
p4o052$1ni7$
Ouuupsss... avec un peu de retard
mais en ce jour de St François de Salle :
Septante ???,
vous avez dit : septante !!!
bon zani mon Jacquouille ;-)
"Jacquouille"  a écrit dans le message de groupe de discussion :
p4asik$1m35$
.... et en "cellules", elle s'y entend, notre Isabelle.
Pourquoi ne pas employer "for each c ...." comme beaucoup le font?
Jacques
" Le vin est au repas ce que le parfum est à la femme."
Le 2018-01-24 à 11:44, Cathy Monier a écrit :