Correspondance VBA Excel et Formules Excel

evil_gouki_x

XLDnaute Nouveau
Salut j'ai une petite question sur une erreur dans VBA.

Je vous donne le contexte:

Sur ma feuille Excel j'ai la formule:
=INDEX(B!$B$8:$AAK$1187,$B$2,2)

mais comme dans la case de la formule il m'affiche un "0" s'il ne trouve pas les valeurs, j'ai voulu rendre le "0" invisible. j'ai donc transforme la formule ci dessus en :

=IF(INDEX(B!$B$8:$AAK$1187,$B$2,2)=0,"",INDEX(B!$B$8:$AAK$1187,$B$2,2))

Voila.

Jusque la pas de probleme.
j'ai voulu mettre ce code sur VBA et j'ai donc fait:
Code:
Sub Sample_XlsDwl()

Range("B7").Formula = "=INDEX(B!$B$8:$AAK$1187,$B$2,2)"

End Sub

le Code est ecrit dans un MODULE et j'appelle Sub Sample_XlsDwl dans un autre programme Sub se trouvant sur une FEUILLE1 grace a :
Code:
Call Sample_XlsDwl

Jusque la tout va bien mais mon probleme survient quand je veux mettre en VBA la Formule =IF(INDEX(B!$B$8:$AAK$1187,$B$2,2)=0,"",INDEX(B!$B$8:$AAK$1187,$B$2,2)).

Je fais alors :

Code:
 Sub Sample_XlsDwl()

Range("B7").Formula = "=IF(INDEX(B!$B$8:$AAK$1187,$B$2,2)=0,"",INDEX(B!$B$8:$AAK$1187,$B$2,2))"

End Sub

Et la ca m'affiche une erreur "1004". :(
Je ne comprend vraiment pas pourquoi. pourtant theoriquement ca devrait fonctionner...:confused:

J'ai essaye avec FormulaArray, FormulaR1C1, j'ai meme tente un FormulaHidden. mais rien j'ai toujours la meme erreur.

Ou est ce que le truc plante???? est ce que quelqu'un pourrait me donner la voix a suivre.

je suis sur excel 2007 (en version jap mais c pas bien grave)

Et j'ai un Module Sample_XlsDwl et un Sub dans une Feuille nommee "SHEET1".

une petite idee du probleme? :confused:

je vous remercie d'avance

E_G_X
 

Pierrot93

XLDnaute Barbatruc
Re : Correspondance VBA Excel et Formules Excel

Bonjour Evil

ci dessous les differents façons de renvoyer une formule par vba :

Code:
    'initialise la variable par le numéro de la ligne modifiée
    'utile uniquement avec les propriétés "Formula" et "FormulaLocal"
    i = Target.Row
    
    'Renvoie ou définit la formule de l'objet, en utilisant les notations
    'de style R1C1 dans le langage de la macro.
    Target.Offset(0, 1).FormulaR1C1 = _
        "=VLOOKUP(RC[-1],Feuil2!R2C1:R8C2,2,FALSE)"
    
    'Renvoie ou définit la formule de l'objet, en utilisant les références
    'du style A1 dans le langage de l'utilisateur.
    Target.Offset(0, 1).FormulaLocal = _
        "=RECHERCHEV(A" & i & ";Feuil2!A2:B8;2;FAUX)"
    
    'Renvoie ou définit la formule de l'objet dans le style de référence
    'A1 et dans la langue de la macro.
    Target.Offset(0, 1).Formula = _
        "=VLOOKUP(A" & i & ",Feuil2!A2:B8,2,FALSE)"
    
    'Renvoie ou définit la formule de l'objet, en utilisant les notations
    'de style R1C1 dans le langage de l'utilisateur.
    Target.Offset(0, 1).FormulaR1C1Local = _
        "=RECHERCHEV(LC(-1);Feuil2!L2C1:L8C2;2;FAUX)"

ici "Target" représente un objet range (une cellule), le langage utilisateur et vba a bien une importance.

bonne journée
@+
 

evil_gouki_x

XLDnaute Nouveau
Re : Correspondance VBA Excel et Formules Excel

Pierrot93 à dit:
Bonjour Evil

ci dessous les differents façons de renvoyer une formule par vba :

Code:
    'initialise la variable par le numéro de la ligne modifiée
    'utile uniquement avec les propriétés "Formula" et "FormulaLocal"
    i = Target.Row
    
    'Renvoie ou définit la formule de l'objet, en utilisant les notations
    'de style R1C1 dans le langage de la macro.
    Target.Offset(0, 1).FormulaR1C1 = _
        "=VLOOKUP(RC[-1],Feuil2!R2C1:R8C2,2,FALSE)"
    
    'Renvoie ou définit la formule de l'objet, en utilisant les références
    'du style A1 dans le langage de l'utilisateur.
    Target.Offset(0, 1).FormulaLocal = _
        "=RECHERCHEV(A" & i & ";Feuil2!A2:B8;2;FAUX)"
    
    'Renvoie ou définit la formule de l'objet dans le style de référence
    'A1 et dans la langue de la macro.
    Target.Offset(0, 1).Formula = _
        "=VLOOKUP(A" & i & ",Feuil2!A2:B8,2,FALSE)"
    
    'Renvoie ou définit la formule de l'objet, en utilisant les notations
    'de style R1C1 dans le langage de l'utilisateur.
    Target.Offset(0, 1).FormulaR1C1Local = _
        "=RECHERCHEV(LC(-1);Feuil2!L2C1:L8C2;2;FAUX)"

ici "Target" représente un objet range (une cellule), le langage utilisateur et vba a bien une importance.

bonne journée
@+

Salut Target merci pour ton aide. je vais tester ton code des ce soir et je te dis comment ca fonctionne.
:)

petite info voici une partie du contenu de mon module que je veux adapter (je peux pas tout mettre mais tout le module est base sur ce modele......ne vous moquez pas trop je debute:eek: ):

Code:
Sub Sample_XlsDwl()

Range("B5").Formula = "=INDEX(B!$B$8:$AAK$1187,$B$2,1)"
Range("B7").Formula = "=INDEX(B!$B$8:$AAK$1187,$B$2,2)"
Range("B9").Formula = "=INDEX(B!$B$8:$AAK$1187,$B$2,3)"
Range("B11").Formula = "=INDEX(B!$B$8:$AAK$1187,$B$2,4)"

Range("D14").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5)"
Range("D15").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 4)"
Range("D16").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 8)"
Range("D17").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 12)"
Range("D18").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 16)"
Range("D19").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 20)"
Range("D20").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 24)"
Range("D21").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 28)"
Range("D22").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 32)"
Range("D23").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 36)"
Range("D24").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 40)"
Range("D25").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 44)"
Range("D26").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 48)"
Range("D27").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 52)"
Range("D28").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 56)"
Range("D29").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 60)"
Range("D30").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 64)"
Range("D31").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 68)"
Range("D32").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 72)"
Range("D33").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 76)"
Range("D34").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 80)"
Range("D35").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 84)"
Range("D36").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 88)"
Range("D37").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 92)"
Range("D38").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 96)"
Range("D39").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 100)"
Range("D40").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 104)"
Range("D41").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 108)"
Range("D42").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 112)"
Range("D43").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 116)"
Range("D44").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 120)"
Range("D45").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 124)"
Range("D46").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 128)"
Range("D47").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 132)"
Range("D48").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 136)"
Range("D49").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 140)"
Range("D50").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 144)"
Range("D51").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 148)"
Range("D52").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 152)"
Range("D53").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,5 + 156)"



Range("E14").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6)"
Range("E15").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 4)"
Range("E16").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 8)"
Range("E17").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 12)"
Range("E18").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 16)"
Range("E19").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 20)"
Range("E20").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 24)"
Range("E21").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 28)"
Range("E22").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 32)"
Range("E23").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 36)"
Range("E24").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 40)"
Range("E25").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 44)"
Range("E26").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 48)"
Range("E27").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 52)"
Range("E28").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 56)"
Range("E29").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 60)"
Range("E30").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 64)"
Range("E31").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 68)"
Range("E32").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 72)"
Range("E33").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 76)"
Range("E34").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 80)"
Range("E35").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 84)"
Range("E36").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 88)"
Range("E37").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 92)"
Range("E38").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 96)"
Range("E39").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 100)"
Range("E40").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 104)"
Range("E41").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 108)"
Range("E42").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 112)"
Range("E43").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 116)"
Range("E44").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 120)"
Range("E45").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 124)"
Range("E46").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 128)"
Range("E47").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 132)"
Range("E48").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 136)"
Range("E49").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 140)"
Range("E50").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 144)"
Range("E51").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 148)"
Range("E52").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 152)"
Range("E53").Formula = "=INDEX(B!$B$8:$AAK$1185,$B$2,6 + 156)"

J'avais pense qu'avec une boucle For...Next je pourrais rendre ce module plus........ pratique surtout si dans l'avenir je dois ajouter d'autre Cellule.
mais je n'ai pas encore reflechi au sujet de cette boucle.


en tout cas la soluce que tu proposes me redonne de l'espoir merci :)
 

evil_gouki_x

XLDnaute Nouveau
Re : Correspondance VBA Excel et Formules Excel

Pascal76 à dit:
Bonjour

je pense que le problème vient des "

essaies en faisant

Range("B7").Formula = "=IF(INDEX(B!$B$8:$AAK$1187,$B$2,2)=0,"""",INDEX(B!$B$8:$AAK$1187,$B$2,2))"


Salut Pascal76

Ben moi aussi je pensais que ca venait des ""
mais j'avais deja teste ta soluce dans plusieurs sens et ca ne passe pas:(

j'ai meme essaye de separer les deux formules et de les relier avec ¥ mais toujours la meme erreur
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Correspondance VBA Excel et Formules Excel

evil_gouki_x à dit:
Salut Pascal76

Ben moi aussi je pensais que ca venait des ""
mais j'avais deja teste ta soluce dans plusieurs sens et ca ne passe pas:(

j'ai meme essaye de separer les deux formules et de les relier avec ¥ mais toujours la meme erreur

Re

Bizarre j'ai testé sans la colonne AAK car excel2000 et perso ça passe
 

evil_gouki_x

XLDnaute Nouveau
Re : Correspondance VBA Excel et Formules Excel

Pierrot93 à dit:
Bonjour Evil

ci dessous les differents façons de renvoyer une formule par vba :


ici "Target" représente un objet range (une cellule), le langage utilisateur et vba a bien une importance.

bonne journée
@+

Desole pierrot je me suis trompe. je lisais encore ta phrase pendant que je te repondais
 

Discussions similaires

Statistiques des forums

Discussions
312 471
Messages
2 088 707
Membres
103 927
dernier inscrit
Mkeal