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

14 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  2. 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
  3. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  7. 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
  8. 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
  9. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  10. 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
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      Alt-F11 pour accéder au code
      0
  11. 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
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
       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
      1. Tcholko > ccm81 Messages postés 11033 Statut Membre
         
        " 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
  12. 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
  13. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  14. 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
  15. 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