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

Est-ce possible d'écrire une condition et une action dans cellule pour VBA ?

4 réponses
Avatar
ocean
Bonjour,

J'ai ce probl=E8me :
Un tableau de donn=E9es sans aucun calcul mais avec beaucoup de zones.
Toutes les lignes ont les m=EAmes zones.

Par Vba, je teste en boucle sur toutes les lignes si une condition ou
des conditions de chaque ligne sont r=E9unies, alors soit je la
supprime, soit je la modifie, soit j'ajoute un calcul.

Comme mes conditions sont tr=E8s nombreuses mais hi=E9rarchis=E9es et
variables en nombre, je souhaiterai ne pas refaire =E0 chaque fois une
modification dans le VBA.

Est-il concevable de cr=E9er une feuille s=E9par=E9e de param=E8tres en
clair :
Condition 1 : cellule de colonne C =3D oui ou non * ou * cellule de la
colonne R =3D 5% de la cellule de la colonne B
Action si condition 1 et/ou condition 2 ok
et d'y ajouter le code VBA correct (il n'y a que le n=B0 de ligne qui
change) sous forme de texte ?

Je souhaite avoir dans le VBA :

For ligne =3D 1 to derniereligne
Do until condition
' tester la Condition 1 sur la ligne' + 'supprimer, modifier, calculer
la ligne'
loop
Next ligne

Est-ce possible ? Comment proc=E9der pour faire au plus simple ?

Merci d'avance pour vos conseils, vos liens ou vos pistes.

4 réponses

Avatar
FFO
Salut à toi
J'ai du mal à cerner ton besoin
Je crois comprendre que tu as une macro qui réagit en fonction de 2
conditions particulièrement changeantes au grés des besoins
Tu souhaiterais donc au lieu d'intervenir systématiquement dans la macro
pour l'adapter utiliser une feuille dans laquelle tu viendrais chercher ces
conditions et que tu modifierais à loisir

Dans cette dynamique tu peux trés bien mettre dans ta macro ceci :

Condition1 = Sheets("Paramètre").range("A1")
Condition2 = Sheets("Paramètre").range("A2")

If Condition1 then
suite du code
End If
If Condition2 then
suite du code
End If

Attention malgrés tout aux données et à la syntaxe des instructions mises
dans ces cellules qui peuvent altérer le fonctionnement de la Macro

Espérant avoir répondu à ton attente




Bonjour,

J'ai ce problème :
Un tableau de données sans aucun calcul mais avec beaucoup de zones.
Toutes les lignes ont les mêmes zones.

Par Vba, je teste en boucle sur toutes les lignes si une condition ou
des conditions de chaque ligne sont réunies, alors soit je la
supprime, soit je la modifie, soit j'ajoute un calcul.

Comme mes conditions sont très nombreuses mais hiérarchisées et
variables en nombre, je souhaiterai ne pas refaire à chaque fois une
modification dans le VBA.

Est-il concevable de créer une feuille séparée de paramètres en
clair :
Condition 1 : cellule de colonne C = oui ou non * ou * cellule de la
colonne R = 5% de la cellule de la colonne B
Action si condition 1 et/ou condition 2 ok
et d'y ajouter le code VBA correct (il n'y a que le n° de ligne qui
change) sous forme de texte ?

Je souhaite avoir dans le VBA :

For ligne = 1 to derniereligne
Do until condition
' tester la Condition 1 sur la ligne' + 'supprimer, modifier, calculer
la ligne'
loop
Next ligne

Est-ce possible ? Comment procéder pour faire au plus simple ?

Merci d'avance pour vos conseils, vos liens ou vos pistes.




Avatar
ocean
On 8 juin, 16:04, FFO wrote:

Bonjour FFO
Salut à toi
J'ai du mal à cerner ton besoin
Merci de ta réponse, désolé, c'est de ma faute.


Mon besoin est :
Puis-je écrire des bouts de code VBA dans une cellule ?
Comment les rendre exécutables dans un module VBA ?
...
Pour mieux m'expliquer par rapport à ton exemple :
"If Condition1 then suite du code"

"Conditions 1" est : dans la cellule A1 de la feuille 2, écrit peut-
être ainsi : "O2+P2>Q2"
"suite du code" est : dans la cellule A2 de la feuille 2, écrit peut-
être ainsi : "R2=O2*1.10"
Le code VBA au milieu d'un sub ou dans un private sub devient :
If O2+P2>Q2 then R2=O2*1.10

En moins de ligne, me suis-je mieux expliqué ? Je n'arrive pas à
trouver une réponse passée sur ce forum.

Avatar
FFO
Bonsoir ocean

Aprés étude de ta demande
Ce qui est possible de faire en prenant pour exemple :
If O2+P2>Q2 then R2=O2*1.10

de mettre dans la feuille 2
Cellule A1 : O2
Cellule B1 : P2
Cellule C1 : Q2
Cellule A2 : R2
Cellule B2 : O2
Cellule C2 : 1.10

Dans ta macro de mettre le code :
If Range(Range("A1")) + Range(Range("B1")) > Range(Range("C1")) then
Range(Range("A2")) = Range(Range("B2"))*Range("C2")
End If

Tu peux changer les données de tes cellules :
pour celles qui contiennent des références de cellule d'autre références de
cellule
pour celles qui contiennent des chiffres d'autres chiffres

Si tu souhaites dans cet exemple faire appel au même cellule de la feuille 2
avec les données dans la feuille 1 tu doit mètre ce code :

If Sheets("Feuil2").Range(Sheets("Feuil1").Range("A1")) +
Sheets("Feuil2").Range(Sheets("Feuil1").Range("B1")) >
Sheets("Feuil2").Range(Sheets("Feuil1").Range("C1")) Then
Sheets("Feuil2").Range(Sheets("Feuil1").Range("A2")) =
Sheets("Feuil2").Range(Sheets("Feuil1").Range("B2")) *
Sheets("Feuil1").Range("C2")
End If
La feuil1 représente les cellules qui portent les données
La feuil2 représente celle à prendre en compte pour les cellules concernées
Les symboles +, =, > ne peuvent être récupérés de la même manière
On ne peut donc les intégrer dans ces cellules
La trame de ta condition donc doit faire parti du code de cette manière :

If Cellule + cellule > cellule Then
Cellule = Cellule*Cellule

A toi de créer autant de trame nécessaire en fonction de ton besoin et de
jouer avec tes cellules comme décrit ci-dessus

Ce n'est pas le pérou mais un certain confort pour toi

Espérant t'avoir apporté une petite solution


On 8 juin, 16:04, FFO wrote:

Bonjour FFO
Salut à toi
J'ai du mal à cerner ton besoin
Merci de ta réponse, désolé, c'est de ma faute.


Mon besoin est :
Puis-je écrire des bouts de code VBA dans une cellule ?
Comment les rendre exécutables dans un module VBA ?
....
Pour mieux m'expliquer par rapport à ton exemple :
"If Condition1 then suite du code"

"Conditions 1" est : dans la cellule A1 de la feuille 2, écrit peut-
être ainsi : "O2+P2>Q2"
"suite du code" est : dans la cellule A2 de la feuille 2, écrit peut-
être ainsi : "R2=O2*1.10"
Le code VBA au milieu d'un sub ou dans un private sub devient :
If O2+P2>Q2 then R2=O2*1.10

En moins de ligne, me suis-je mieux expliqué ? Je n'arrive pas à
trouver une réponse passée sur ce forum.





Avatar
ocean
On 9 juin, 21:57, FFO wrote:

Bonsoir FFO, je t'avais répondu mais mon message n'a pas été publié.

D'abord grand merci à toi pour ta patience et tes astuces.
Je ne connaissais pas le range(range()). Sympa.

Excuse-moi mais je ne dois pas bien expliquer.
Voici :
Ma question fondamentale est : Peut-on écrire du VBA avec du VBA et
l'exécuter dans un private Sub.
La question a été posée mais le demandeur et le demandé ont indiqu é le
site de F. Sigonneau sans plus de précision et je ne trouve pas
l'info.

Je ne suis pas un pro et je voudrais faire simple.

Je souhaite écrire à la main en texte toute une formule VBA(test
éventuel et action) dans une feuille de paramètrage en face du
commentaire de la condition et que le programme exécute les étapes
suivantes :

1 - Collection des données (fait)
2 - Exécution des conditions et des actions de la feuille de
paramètrages (écrits en texte)
3 - Production de la sélection et des calculs dans une feuille de
résultat.
4 - Modification à la main des paramètres
5 - Retour au point 2

Une solution possible ? (à mon niveau)
Je sais écrire dans un fichier séquentiel le code VBA que je veux
obtenir pour les tests variables, mais peut-on l'insérer dans un
private sub ? Ou autrement ?

En espèrant m'être mieux fait comprendre.
Merci d'avance.
Cordialement.