Demande aide syntaxe recalcitrante

Résolu
ZEFRAM28 Messages postés 15 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 9 janvier 2012 - 6 janv. 2012 à 00:08
ZEFRAM28 Messages postés 15 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 9 janvier 2012 - 9 janv. 2012 à 12:39
Bonjour à toutes et à tous,

Je travaille sur un fichier dont la formule d'une cellule est renseignée par une macro.

Le fonctionnement est le suivant, sur une sheet j'ai une case à cocher, j'ai affecté a une cellule ( DFPP_VIERGE!I15) l’état de cette case (cochée vrai/ décochée Faux)
Dans une autre cellule (DFPP_VIERGE!G12) , figure un commentaire.


je veux, en fonction de l'état de la case a cocher, placer dans une tierce cellule le contenu de DFPP_VIERGE!G12 en y intégrant en fonction de l'état de la case à cocher l'information texte "décentrage".



La formule de la tierce cellule renseignée hors macro (et qui fonctionne ) est :

SI(DFPP_VIERGE!I15VRAI;"decentré " & DFPP_VIERGE!G12;DFPP_VIERGE!G12)



Ma question est, quelle syntaxe dois-je utiliser pour faire écrire cette formule par la macro dans la cellule en question?
Pour information, la sheet DFPP_VIERGE sera identifiée dans la macro par la variable : nomnouvelledfpp???


J'ai fait différents tests mais le texte "decentré" me pose problème (à cause des guillemets qui polluent la syntaxe)

Merci de votre aide.

31 réponses

ZEFRAM28 Messages postés 15 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 9 janvier 2012
7 janv. 2012 à 15:10
Bonjour,

Je voudrais avancer sur le sujet mais je constate que ma version (maison) d'Excel est une 2003 SP3 la ou a mon bureau c'est une 2003 SP2.

Résultat, j'ai une erreur à l'ouverture du fichier à la maison.

Run-time error '5':
Invalide procedure call or argument

sur la ligne :

Application.CommandBars("Ply").Controls("Supprimer").Enabled = False

A defaut de solution, je vais donc devoir attendre lundi pour avancer.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 janv. 2012 à 16:04
Gné ?
Nous ne voyons pas trop le lien de cette "difficulté" avec le sujet ouvert !
Nous ne savons par contre pas où tu en es en ce qui concerne le sujet ouvert !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ZEFRAM28 Messages postés 15 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 9 janvier 2012
7 janv. 2012 à 21:43
Nous ne voyons pas trop le lien de cette "difficulté" avec le sujet ouvert !
Il n'y en a aucune!
c’était juste pour signaler que je ne pourrais pas reprendre le fil avant lundi.


Nous ne savons par contre pas où tu en es en ce qui concerne le sujet ouvert !
Ben c'est un peu lié a la remarque ci-dessus.

Cordialement.
0
ZEFRAM28 Messages postés 15 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 9 janvier 2012
8 janv. 2012 à 20:51
Salut Renfield,

En attendant de pourvoir tester tes proposition, j'y ai jeté un œil.

tu me proposes :
.Cells(numligne, 16).FormulaLocal = "=si(" & nomnouvelledfpp & "!I15;""Décentrage """ & nomnouvelledfpp & "!G12;" & nomnouvelledfpp & "!G12)" 'Solution clotaire



la fonction si s'écrit bien ; =si(testlogique;valsivrai;valsifaux)
Je vois bien le test de la cellule I15 mais pas le critère (=vrai).

pour moi, on devrait ecrire:
.Cells(numligne, 16).FormulaLocal = "=si(" & nomnouvelledfpp & "!I15=vrai;""Décentrage """ & nomnouvelledfpp & "!G12;" & nomnouvelledfpp & "!G12)" 'Solution clotaire

ai-je raison?

ZEFRAM
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 janv. 2012 à 21:01
ai-je raison?

En dehors du fait que (dit une fois de plus), il est préférable d'utiliser la syntaxe avec Formula et non FormulaLocal, tu sauras vite si bon ou non (en fonction de tes variables) en faisant simplement un msgbox de ta formule, non ?
exermple :
msgbox "=si(" & nomnouvelledfpp & "!I15;""Décentrage """ & nomnouvelledfpp & "!G12;" & nomnouvelledfpp & "!G12)"

C'est le tout premier réflexe.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ZEFRAM28 Messages postés 15 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 9 janvier 2012
9 janv. 2012 à 00:06
Je crois que nous ne nous comprenons pas.

J'intègre le fait qu'il failles mieux utiliser Formula
donc mon code devient :

.Cells(numligne, 16).Formula = "=IF(" & nomnouvelledfpp & "!I15,""Décentrage """ & nomnouvelledfpp & "!G12," & nomnouvelledfpp & "!G12)" 'Solution clotaire

OK.

Ma question reste valable sur le test logique "vide"

=si( testlogique ;valsivrai;valsifaux)

.Cells(numligne, 16).Formula = "= si( " & nomnouvelledfpp & "!I15...

on devrait trouver au lieu de mes "..." =xx ou >xx voir >xx mais rien ne suit ce test.

C'est comme si j'écrivait :
si I15 alors valvrai;valfaux

Ai je bien compris ou non l’écriture de cette ligne?



quand a ta proposition d'utiliser la msgbox, je vais la tester dès demain.
Tres bonne idée, merci.
0
ZEFRAM28 Messages postés 15 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 9 janvier 2012
9 janv. 2012 à 00:16
Autre remarque,

Les formules que vous me proposez ont (a mon avis) un manque.

la formule que je dois retrouver dans ma cellule apres déroulé de la macro devrait etre :

SI(DFPP_1!I15VRAI;"decentrage " &
DFPP_1!G12;DFPP_1!G12)

avec le nom des feuilles sous la variable nomnouvelledfpp

On remarque juste apres decentrage le &

C'est lui qui relie le mot "decentrage" au contenu de la cellule G12.

Je ne vois pas apparaitre ce & dans les codes que vous m'avez proposé.

Encore une fois, ai je bien analysé le code?
0
ZEFRAM28 Messages postés 15 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 9 janvier 2012
9 janv. 2012 à 00:28
j'ai requisitionné le pc de ma fille, elle a excel dessus (pas cool mais a cette heure ci, elle dort car il y a ecole demain)

bon, j'ai intégré le code de la msgbox :

MsgBox "=IF(" & nomnouvelledfpp & "!I15=true,""Décentrage """ & nomnouvelledfpp & "!G12," & nomnouvelledfpp & "!G12)"


et cela donne ceci :

/img

il manque bien le & dont je parle au dessus.

Très bonne idée néanmoins la msgbox.


Différents tests me démontrent la difficulté d'intégrer ce texte via une macro.

les guillemets définissant du texte et ceux utilisés par excel pour éelimiter le code de l'ajout comme "& et "& ne cohabitent pas bien.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 janv. 2012 à 08:12
Ce n'est pas VBA, qui a des fifficultés à utiliser les ", mais toi qui en as assurément à en comprendre l'utilisation rationnelle !

Regarde ce que je t'ai écrit vendredi à 17 h 52

Petite preuve/test à 5 sous
Code Visual Basic :

Sheets("Feuil1").Range("A1").Formula = "=IF(A1=TRUE,""c'est vrai"",""c'est pas vrai"")"


Sa transposition, pour toi, si tu avais analysé et compris, devrait donc tout simplement être du genre :

Sheets("Feuil2").Range("A2").Formula = "=IF(Feuil1!B1=TRUE,""c'est vrai"" & Feuil1!C1,Feuil1!C1)"

pour obtenir ceci en Formule de la cellule A1 de la Feuille Feuil2

=SI(Feuil1!B1=VRAI;"c'est vrai" & Feuil1!C1;Feuil1!C1)


et par voie de conséquence : ===>> affichera en cellule A2 de Feuil2 :
en admettant que dans la cellule C1 de Feuil on ait "coucou"
Si B1 de Feuil1 True>> c'est vrai coucou
la valeur de la cellule B1 de Feuil1 si valeur False ===> coucou

Voilà ===>> analyse ===>> comprends ===>> adapte à tes cas (avec variables feuilles)
Au moins : tâtonne (essais différents) pour t'exercer ===W>> jusqu'à ce que ce soit juste un jeu de marelle, hein !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 janv. 2012 à 08:12
pour le test logique, non, tu n'as pas fondamentalement tord...
cela fonctionne avec le test

plutot qu'un test logique, la fonction SI (comme les IF des macros, etc.)
attends un Boolean
Vrai ou Faux, au final

tu souhaites

if a=true
ce égal, renverra true ou false (en cas d'equivalence de valeur)
on retrouve donc bien

if a

vu ton soucis de concaténation dynamique,

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
ZEFRAM28 Messages postés 15 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 9 janvier 2012
9 janv. 2012 à 12:39
Salut à vous deux,

Renfeild : ton dernier code fonctionne à merveille, merci pour ta pédagogie.

Ucfoutu : Merci pour le temps que tu as bien voulu me consacrer malgrés le fait que je sois un vrai boulet.

Merci encore.
0
Rejoignez-nous