Est-ce possible d'écrire une condition et une action dans cellule pour VBA ?
4 réponses
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 :
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.
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 :
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.
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 :
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.
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.
On 8 juin, 16:04, FFO <F...@discussions.microsoft.com> 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.
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.
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.
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 <F...@discussions.microsoft.com> 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.
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.
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.
On 9 juin, 21:57, FFO <F...@discussions.microsoft.com> 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.
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.