Probléme d'adaptation Formule excel en VBA

  • Initiateur de la discussion Fab61
  • Date de début
F

Fab61

Guest
Bonjour,

dans ma petite application quand j'inserte une ligne je voudrai que la cellule B de la ligne inseré est une formule (c'est ici le probleme) je l'arrive pas a l'ecrire comme il faut ! Pour l'instant ma macro est celle ci :

Code:
ActiveCell.EntireRow.Offset(0, 0).Range('B1').Select
ActiveCell.FormulaR1C1 = '=RC[6]&RC[1]'

Mais je voudrai inserer un ' / ' entre mes 2 cellules ...
Ou alors celle formule la ...
=SI(ESTVIDE(H8);'';H8&' / '&C8)

Ceux qui me donne un resutalt de ce genre :
Reference / Indice

Bref tous marche mais le probleme c le ' / '

Merci de votre aide.
Fabien
 

pierrejean

XLDnaute Barbatruc
bonjourFab61
Salut Eric

voila ce que j'obtiens avec l'enregistreur de macro

ActiveCell.FormulaR1C1 = '=IF(ISBLANK(R[5]C[3]),'''',R[5]C[3] /R[5]C[-2])'

indication:l'activecell est E3, il faut donc adapter

Message édité par: pierrejean, à: 07/04/2006 09:50
 
F

Fab61

Guest
Bonjour,

Sa ne marche pas

Code:
ActiveCell.EntireRow.Offset(0, 0).Range('B1').Select
ActiveCell.FormulaR1C1 = '=RC[6]& ' / ' & RC[1]'

Il me met
'erreur d'éxecution '13':
Incompatiblité de type
 
F

Fab61

Guest
Merci piere jean,

mais sa n'as pas l'air de marcher

j'obtien qlq chose comme ceci :

=SI(ESTVIDE(H21);'';H21 / C21)

avec ce code

Code:
ActiveCell.EntireRow.Offset(0, 0).Range('B1').Select
ActiveCell.FormulaR1C1 = '=IF(ISBLANK(RC[6]),'''',RC[6] / RC[1])'

et il faudrai qlq chose comme ceci

=SI(ESTVIDE(H21);'';H21&'/'&C21)
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour à tous

un code comme ceci devrait passer
Code:
Range('B' & ActiveCell.Row).FormulaR1C1 = '=IF(ISBLANK(RC[6]),'''',RC[6]&'' / ''&RC[1])'
il place la formule dans la cellule colonne B de la ligne de la cellule active ce que j'ai traduit de ton code.

A+
 
F

Fab61

Guest
Merci pour vos réponses sa marche nikel :)

voici le code final sa pourra peu etre servir a qlq :)

Code:
ActiveCell.EntireRow.Offset(0, 0).Range('B1').Select
ActiveCell.FormulaR1C1 = '=IF(ISBLANK(RC[6]),'''',RC[6]&'' / ''&RC[1])'
 

pierrejean

XLDnaute Barbatruc
re

effectivement apres recherche j'ais detecté dans ce que tu m'as transmis un espace en trop

je confirme que cette expression est correcte

ActiveCell.FormulaR1C1 = '=IF(ISBLANK(RC[6]),'''',RC[6] /RC[1])'

a ceci pres qu'elle donne H11 et C11 e non H21 C21

tu avais ecrit:

ActiveCell.FormulaR1C1 = '=IF(ISBLANK(RC[6]),'''',RC[6] / RC[1])'

note: sur le forum les espaces ne sont pas faciles a voir

Message édité par: pierrejean, à: 07/04/2006 10:30
 

pierrejean

XLDnaute Barbatruc
re

pour etre vraiment complet

pour placer en B1 la formule

=SI(ESTVIDE(H8);'';H8 /C8)

le code est

ActiveCell.EntireRow.Offset(0, 0).Range('B1').Select
ActiveCell.FormulaR1C1 = '=IF(ISBLANK(R[7]C[6]),'''',R[7]C[6] /R[7]C[1])'

edit:

entre nous la 1ere ligne peur s'abreger en

Range('B1').Select

Message édité par: pierrejean, à: 07/04/2006 10:52
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re

entre nous, pierre jean, tu as tort, la première ligne ne peut s'abréger ainsi.
l'instruction en fait sélectionne la cellule colonne B de la ligne de la cellule active et peut s'abréger en fait en
Code:
Range('B' & ActiveCell.Row).select
le offset en l'occurence ne sert à rien positionné à 0,0
en exemple l'instruction
Code:
Range('B1').Range('B1').Select
selectionne en fait la cellule C1 (la cellule B1 en référence à B1)
de toute façon la sélection ne sert à rien dans ce code sauf à le ralentir, les deux lignes d'instruction pouvant s'écrire
Code:
Range('B' & ActiveCell.Row).FormulaR1C1 = '=IF(ISBLANK(RC[6]),'''',RC[6]&'' / ''&RC[1])'

Cordialement, A+
 

pierrejean

XLDnaute Barbatruc
hello Yeahou

merci de ta precision

peu habitué aux codes tarabiscotés j'ignorais cette façon de s'exprimer

a l'avenir je ferais un test plus complet avant de dire une connerie

mes excuses a tous

il n'en reste pas moins que de reference relative en reference relative ta ligne de code ne garantit nullement H8/C8

en plus au temps pour moi j'ais cru jusqu'au bout qu'il s'agissait d'une division alors que fab desirait un string

nul de chez nul !!!!!!!!!

Message édité par: pierrejean, à: 07/04/2006 13:13
 
F

Fab61

Guest
Re coucou

En faite je voulai savoir si ct possible d'appliquer cette formule-ci a toute la colonne mais en cherchant la premiere a la denriere cellule rempli ? (afin de ne pas appliquer la formule sur les 65000 lignes.


Ca doit etre avec la fonction End(xlDown) mais je sais pas trops aprés.

Merci
Fabien
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re

une instruction tableau, c'est le plus rapide, tu changes B1 par la cellule de début, tu changes A65536 par la colonne de référence

A+

Code:
Range('B1:B' & Range('A65536').End(xlUp).Row).FormulaR1C1 = '=IF(ISBLANK(RC[6]),'''',RC[6]&'' / ''&RC[1])'
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 317
Membres
102 862
dernier inscrit
Emma35400