Changer de référence de cellule selon la valeur d'une autre cellule

Tcholko -  
 Tcholko -
Bonjour,
Je me demande, enfin je suppose que c'est possible et que c'est juste moi qui ne connait pas trop virtual basic, comment changer la référence d'une cellule selon u e valeur.
Exemple :
- Si 7 en A1, alors ma formule (écrite quelque part) fait par exemple "=B7*3
- Si 2 en A1, alors ma formule (écrite quelque part) fait par exemple "=B2*3
- Si 21 en A1, alors ma formule (écrite quelque part) fait par exemple "=B21*3

Dans le même genre :
- Si 7 en A1, alors une formule s'écrit dans la cellule B7
- Si 4 en A1, alors une formule s'écrit dans la cellule B4
- Si 11 en A1, alors une formule s'écrit dans la cellule B11

Comment faire pour que la référence d'une cellule appelé dans une formule puissent évoluer selon les valeur d'une cellule ?

En vous remerciant

Configuration: Windows / Chrome 83.0.4103.61
A voir également:

14 réponses

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Du coup, ce scricpt n’apparaît pas dans "développeur-macro", juste dans "développeur - visual basic"...
je ne sais pas, ma version d'excel (2003) n'a pas la même interface
Macro = un script qui peut ou pas être associé à un bouton, c'est ça ?
entre autres, ici elle réagit à un changement dans la feuille
Et en faite, pourquoi ne rien faire si plusieurs cellule changent ? Quel est le risque ?
vu ce qu'on veut lui faire faire ....
Visual basic semble aussi un langage orienté objet.
oui
target semble avoir plusieurs méthode comme .find, .next... il se comporte comme une liste c'est ça ?
voir ici

Cdlmnt
1
Utilisateur anonyme
 
Bonjour

c'est pas virtual, mais visual, et plus précisément dans le cas d'Excel (on va parier que tu travailles avec Excel...) Visual Basic pour Application.

Ce que tu demandes est possible en VBA et aussi je pense en formules Excel.
Mais si tu le fais avec VBA, y'a pas vraiment d'interêt à modifier la formule, VBA peut faire le calcul plus vite que modifier la formule ce qui ensuite fait un calcul.
Mais bon c'est ton choix.

Afin de déplacer ton message dans le bon forum
=> Excel si tu veux des formules
=>VBA si tu veux une macro.
Et dans le cas d'une macro, si tu persistes à modifier des formules (en dépit de la perte de performances) par rapport à tout faire calculer en VBA
0
Tcholko
 
Bonjour.
Oui, j'ai oublié de préciser, mais c'est bien avec un tableur Excel que je voulais faire ça.
Pardons, effectivement c'est visual Basic.
Donc, si j'ai bien compris, c'est possible de le faire avec/sans macro ? comment ?
Pourriez-vous me donner deux exemples (avec/sans visual basic) ?
En vous remerciant.
0
Utilisateur anonyme
 
Moi non, Excel je ne maitrise pas, mon but était de déplacer ton message dans le bon forum...
Et vu que tu voudrais un exemple de chaque, ben je suis bien emmerdé....

Je vais donc déplacer vers le forum Excel, il s'y parle parfois de VBA.
0

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

Posez votre question
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Bonjour à tous les deux

Pour la première salve essaies
=INDIRECT("B"&$A$1)*3

Pour la deuxième, je comprends mal où tu veux en venir

Cdlmnt
0
Tcholko
 
Merci à tous les deux d'ailleurs, j'oubliais...
L'idée de base est, en partant d'un nombre de'élèves connu, de créer le bon nombre de ligne dans plusieurs tableaux : si 28 élèves (par exemple marqué en A1), alors je veux que ma macro crée 28 lignes à mon tableau (jusqu'à la ligne 28 dans la page suivante).
Merci pour vos explications messieurs.
0
Tcholko
 
@Whismeril: j'avais pas vu ton message. merci !
@ccm81 : "=INDIRECT("B"&$A$1)*3"
ok cela permet de faire changer ma référence dans une formule d'une même cellule.
Maintenant, comment aller faire écrire une formule dans des cellule différente, selon la valeur d'une cellule :
- Si 7 en A1, alors je veux écrire une valeur dans la cellule B7
- Si 12 en A1, alors je veux écrire une valeur dans la cellule B12
- Si 35 en A1, alors je veux écrire une valeur dans la cellule B35
C'est aussi possible ?
En vous remerciant
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Maintenant, comment aller faire écrire une formule dans des cellule différente, selon la valeur d'une cellule :
- Si 7 en A1, alors je veux écrire une valeur dans la cellule B7
- Si 12 en A1, alors je veux écrire une valeur dans la cellule B12
- Si 35 en A1, alors je veux écrire une valeur dans la cellule B35


Avec macro
ça répond à la question, mais ça ne résoud certainement pas ton problème
https://mon-partage.fr/f/KDpeG3vn/

Cdlmnt
0
Tcholko
 
Merci !
mais je n'ai pas compris comment vous avez écrit. Je ne vois pas de macro
Si je mets 7 en A1, il va bien écrire en F7
Si je mets 8 en A1, il va bien écrire en F8

Mais comment ?
cdt
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Alt-F11 pour accéder au code
0
Tcholko
 
Je viens de trouver le code, mais je ne comprend pas tout :
Option Explicit /* c'est quoi .*/

Const cel = "A1" /* la cellule de réf ok*/
Const co = "F" /* la colonne où on va écrire ok*/

Private Sub Worksheet_Change(ByVal Target As Range) /*Byval ?? target devient un réf de cellule c'est ça ?*/
If Target.Count > 1 Then Exit Sub /* ?? ; .count pour compter quoi ? et Sub ?? */
If Not Intersect(Target, Range(cel)) Is Nothing Then /* pour parer à quelque chose qui ne soit pas un nb, donc pas exploitable ? */
Range(co & Target.Value) = Int(20 * Rnd) /* Target.value fait référence à la valeur de la cellule A1 donc on écrit bien en co & val de A1 ok, si je comprends bien, mais je comprends mal le calcul ? Rnd ? */
End If
End Sub


En vous remerciant
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
 Option Explicit 

Directive de compilation qui oblige à déclarer toutes les variables utilisées
If Target.Count > 1 Then Exit Sub

Si plusieurs cellules changent de valeur on ne fait rien
If Not Intersect(Target, Range(cel)) Is Nothing Then

Si la cellule qui change est cel on y va
Range(co & Target.Value) = Int(20 * Rnd)

Met un entier aléatoire (de 0 à 19) en colonne co et en ligne dont le n° est dans la cellule cible (cel)

Là je dois plier boutique

Cdlmnt
0
Tcholko > ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention  
 
" Si plusieurs cellules changent de valeur on ne fait rien" : je n'ai pas compris
"Exit sub" : pas trop compris...
mais je dois pouvoir adapter quand même votre code pour faire des choses.
Comme ce n'est pas une macro, je n'ai pas encore bien compris où écrire ce code dans un fichier Excel (je début en Visual Basic...)
Grand merci pour vos explications
0
Tcholko
 
Selon le nombre en A1, ça va bien écrire au bon endroit, mais la valeur écrite change et je ne comprend pas comment elle est calculé...
cdt
Edit : OK! Rnd renvoie un nb aléatoir... je ne comprennais pas, désolé.
Je commence à comprendre...

Par contre, ce scripte n'est pas une macro... où/comment l'avait-vous écrit ??
en vous remerciant

Edit 2 : Worksheet et Change, dans quel menu faut-il les écrire/définir ? (où aller dans le menu développer ?)
Cdt
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
J'avais oublié celle là
Private Sub Worksheet_Change(ByVal Target As Range) 

Comme son nom l'indique, cette procédure est exécutée lorsqu'il y a un changement dans la feuille
Target (cellule cible) est la/les cellule(s) qui a/ont changé
If Target.Count > 1 Then Exit Sub

Target.count est le nombre de cellules de la cellule cible.
Si plusieurs cellules ont changé (en cas d'une plage modifiée en bloc par exemple) on quitte sans rien faire (exit sub)

Par contre, ce scripte n'est pas une macro... où/comment l'avait-vous écrit ??
Si c'est bien une macro écrite dans le module de la feuille à traiter.
Alt-F11 ou clic-droit sur l'onglet de la feuille pour accéder à l'éditeur vba
0
Tcholko
 
Ok, merci.
Du coup, ce scricpt n’apparaît pas dans "développeur-macro", juste dans "développeur - visual basic"...
Macro = un script qui peut ou pas être associé à un bouton, c'est ça ?
Et en faite, pourquoi ne rien faire si plusieurs cellule changent ? Quel est le risque ?
Et comment récupérer les différentes cellules qui ont changée ?*
Je sais programmer en java. Visual basic semble aussi un langage orienté objet.
target semble avoir plusieurs méthode comme .find, .next... il se comporte comme une liste c'est ça ?
En vous remerciant
0
Tcholko
 
Super merci.
Je commence à comprendre où regarder pour trouver des infos.
On trouve que des choses assez basique sur Youtube, (pour faire des vues), mais débloquer vraiment sur des truck technique, sans en tirer profit, c'est vraiment sympas !
Merci messieurs !
0