[excel vba] affecter formule a une cellule

Fermé
mimic - 13 août 2007 à 11:01
 sbso - 6 juin 2009 à 17:55
Bonjour,

voici un probleme qui a mon avis sera vite resolu. Je souhaite affecter une formule variable a une cellule mais j'obtiens contamment des erreur 400

en recherchant sur le web je trouve des solutions du genre

Activecell.formulaR1C1 = "=somme(1;1)" 
Cells("A1").Value = "=somme(1;1)"


a noter que les formules étaient "sum" dans leurs exemples, mais je suppose qu'ils devaient etre sur une version non fr de excel...

j'ai donc essayer ces exemples ci dessus et je tombe sur des erreurs.

Concretement ce que je souhaite, c'est affecter une formule a une cellule, mais cette formule variera en fonction de parametres que je recupere dans un tableau.

exemple non fonctionnel ( du moins ecrit de tete )

' je veux ecrire dans la cellule c16 la formule de recherche d'une valeur qui se trouve dans la plage 
' de cellules maplage( colonne 3) de la feuille qrtest, a la ligne ou se trouve la valeur dans E14 de 
' ma feuille active ----- dsl si cela semble dur a comprendre mais c'est la description de la formule 
' recherchev


Cells("C16").FormulaR1C1 = "=recherchev(" & Range("E14").value & ";qrtest!maPlage; 3)"


voila l'idee. Je pense qu'il doit y avoir des erreurs de syntaxe et peut-etre des déclarations à ajouter mais c'est due au manque de comprehension de vba et de pratique.

Une solution??

merci de votre aide
A voir également:

2 réponses

la formule ...
ActiveCell.FormulaR1C1 = "=somme(1,1)"

...fonctionne presque. Car en fait elle n'ecrit pas directement la valeur dans la cellule mais #?NOM... mais ca ecrit bien la formule dans la barre de saisie pour la cellule active, et ca marche si on la valide comme si on l'avait saisie manuellement.

mais en rapport avec mon problème, je souhaite ne pas passer par Range(macellule).select / activecell.formular1c1 mais directement par MaCellule.FormulaR1C1 ... suivant les conseils qu'on m'a donnés ici.
3
Même si cela fait un peu de temps... On pourra toujours lire que cela a servi

Voici mon code :


Sub Art()

Dim Svg1, Svg2 As String
Dim MaxC As Long
Dim CellulePrise As Range
Dim Message, Style, Titre



'Selection de la dernière cellule de ta feuille
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Offset(0, 0).Select

'Ou Affectation de cette cellule dans une variable Range
Set CellulePrise = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Offset(0, 0)

Message = "Nous allons sauvegarder votre dernière cellule"
Style = vbOKOnly
Titre = "Une formule se fait attendre"
MsgBox Message, Style, Titre

'Ta cellule est sûrement prise ... Sauvegarde de Formule dans un String. Cette technique est plus générale que le value
Svg2 = CellulePrise.Formula

'Affectation d'une formule à la cellule-Excel
ActiveCell.FormulaR1C1 = "=CONCATENATE(ROW(),"" ### "",COLUMN())"

'Seconde Sauvegarde de Formule dans un String
Svg1 = CellulePrise.Formula

Message = "Nous allons sauvegarder notre formule. La syntaxe est" & Chr(13) & " Dim Svg1 As String" & Chr(13) & "Dim CellulePrise As Range" & Chr(13) & "Svg1 = CellulePrise.Formula"
Style = vbOKOnly
Titre = "Une valeur se fait attendre"
MsgBox Message, Style, Titre

'Création d'une variable Long définissant le nombre de Colonnes
Range("A1").Select
MaxC = ActiveSheet.UsedRange.Columns.Count

'Affectation de valeur. N.B : MaxC n'est pas une formule !!!
CellulePrise.Value = MaxC

Message = "Le maximum de colonnes est : " & MaxC
Style = vbOKOnly
Titre = "Notre formule n'est plus dans la cellule"
MsgBox Message, Style, Titre

'Restauration de la cellule initiale. Affectation de formule vb à Cellule Excel
CellulePrise.Formula = Svg1

Message = "Le nombre de colonnes et de lignes sont respectivement : " & Svg1
Style = vbOKOnly
Titre = "La sauvegarde a eut lieu sans passer par des select"
MsgBox Message, Style, Titre

'Une seconde fois ...
CellulePrise.Formula = Svg2

Message = "La valeur initiale de la cellule est disponible à nouveau " & Svg2
Style = vbOKOnly
Titre = "La sauvegarde a eut lieu sans passer par des select"
MsgBox Message, Style, Titre
3