Pb de syntaxe pour des liens de cellules (important!!) [Résolu]

Signaler
Messages postés
4
Date d'inscription
jeudi 21 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2009
-
Messages postés
4
Date d'inscription
jeudi 21 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2009
-
Bonjour à tous,

J'expose rapidement mon problème.

J'aimerais mettre une formule dans ma cellule active par exemple "= B13 + J13"

Cependant, dans ma situation, je ne suis pas censé connaitre la valeur de la ligne.

Je sais où se situe mes deux cellules(dans l'exemple B13 et J13)
par rapport à ma cellule active en fonction d'une variable que j'ai
noté "nb"

Voici le code que j'ai écrit :

ActiveCell.FormulaR1C1 = "=R" & -nb - 2 & "C[1] - R" & -nb - 2 & "C[7]"

Je sais que ma formule marche parfaitement quand j'écris:

ActiveCell.FormulaR1C1 = "=R[-7]C[1] - R[-7]C[7]"

Cependant cela ne marche que pour un exemple....

Je précise que je souhaite avoir la différence "en temps réels"
lorsque je modifierai les valeurs des deux cellules ( dans l'exemple
B13 et J13)

En conclusion, je coince et je n'arrive pas à repérer l'erreur(
car je suis novice en la matière :D) et une aide ne serait pas superflu
, j'espère que j'ai été clair et vous remercie par avance de vos
réponses.

7 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
ok !

alors voici quelques infos supplementaire:

ActiveCell.Row 'renvoi le numero de ligne de la cellule active


ActiveCell.Column 'renvoi le numero de colonne de la cellule active

donc au lieu de faire

Dim Ligne As Long, Colonne As Long
Ligne =13
Colonne=3

tu fais ?...

Dim Ligne As Long, Colonne As Long
Ligne =ActiveCell.Row
Colonne=ActiveCell.Column

en suite y plus qu'a ajouter ou a soustraire le decalage aux variables Ligne et Colonne au moment ou tu l'ais utilise

interesse toi aussi a la propriété Offset. Voici un exemple qui n'a rien a voir avec ce que tu veux:

'cette exemple prend la valeur de la cellule a gauche de la cellule active, lui ajoute 5 et met le resultat en A1
Range("A1").Value = ActiveCell.Offset(0,-1).Value + 5 'ici on ce decale d'une colonne vers la gauche

Note que pour plus d'info il suffit de placer le cursseur sur la commande ou la propriété ou autre et d'enfoncer(gentillement^^) la touche F1
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

comprend rien !!!

pour commence sache que formulaR1C1 peut etre remplace par formula, ce qui simplifi beaucoup la lecture et l'ecriture de la formule:

ActiveCell.Formula= "=B13+J13"

maintenant si tu veux integrer une variable a ta formule:

Dim nb As Long
nb =13
ActiveCell.Formula= "=B" & nb & "+J" & nb

maintenant si tu voulais integrer une variable pour la ligne et une variable pour la deuxieme colonne :

Dim Ligne As Long, Colonne As Long

Ligne =13
Colonne=10

ActiveCell.Formula= "=B" & Ligne & "+" & Cells(Ligne,Colonne).address(False,False) 'ici la propriété Cells associée à la propriété Address rencvera J13

De plus, si ton objectif est de faire une adition du contenu de 2 Cellules en VBA il existe une methode plus simple:

ActiveCell.Value= Range("B13").Value+Range("J13").Value

ou bien :

Dim Ligne As Long

Ligne =13
ActiveCell.Value= Range("B" & Ligne).Value+Range("J" & Ligne).Value

ou bien encore :

Dim Ligne As Long, Colonne As Long


Ligne =13

Colonne=3
ActiveCell.Value= Cells(Ligne,Colonne).Value+Cells(Ligne,Colonne + 7).Value

Enfin, evite d'utilisé ActiveCell surtout si tu connais la cellule qui doit recevoir le resultat. Par exemple:

Range("A1").Value= Range("B13").Value+Range("J13").Value

Voila il y aurai de quoi en ecrire 10 pages mais je m'arrete la
Messages postés
4
Date d'inscription
jeudi 21 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2009

Désolé de ne pas avoir été clair, je vais essayé de m'expliquer
Voici la situation
Je suis sur une cellule active, et je sais que les deux cases que je souhaite soustraire sont :
- pour la première à (nb +2) au dessus de ma cellule active  et sur la colonne D
-pour la deuxième à (nb+2) au dessus de ma cellule active et colonne J

ps : Si ça peut aider je sais que ma cellule active se trouve sur la colonne C

donc, sur ma cellule active je souhaite avoir "= Dx -Jx"
où x représente la ligne se situant à nb+2 au dessus de ma cellule active.
Voilà c'est assez compliqué à expliquez, j'espère avoir été un peu plus clair
En tout cas merci, de m'avoir répondu si vite et j'espère que vous pourrez m'aider.
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
je t'ai deja repondu, essai de comprendre
Messages postés
4
Date d'inscription
jeudi 21 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2009

Je dois  surement être borné, mais bon je veux vraiment maitrisé ce sujet.
Il me semble que toute les propositions que tu m'a faites ne réponde pas à ma demande("Je me trompe surement.."), mais d'après ce que j'ai compris pour les méthodes que tu m'as données, il faut :

- soit la valeur précise de la case( ex "J13")

- soit la valeur de la ligne en fonction d'une variable(ex nb=13 ->ligne =13)
Je synthétise grossièrement, je l'admet  !!

Malheureusement je n'ai ni l'un ni l'autre, j'ai uniquement la position de la cellule en fonction de ma cellule active et d'une variable nb.
Pour l'illustrer, plus simplement je donne l'exemple:
La ligne des deux cellules à soustraire = "La ligne de ma cellule active" -2- nb
et les colonnes sont connues, c'est D et J.
Je suis désolé d'être obstiné(peut être dans mon erreur), mais j'ai besoin d'une lumière qui éclaircisse mes pensée !! Merci encore!!
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
ouuuuuups ! tu les utilises 
Messages postés
4
Date d'inscription
jeudi 21 décembre 2000
Statut
Membre
Dernière intervention
1 juillet 2009

Merci Merci Merci!!Tu m'a sauvé la vie !!J'ai testé ça marche!!
Je n'avais absolument pas pensé à me ramener à des lignes fixes!
J'avoue ma devise s'est pourquoi faire simple quand on peux faire compliqué
Merci beaucoup pour la rapidité des messages et la patience que tu a eu à mon égard .
A Bientôt!!