IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème de référence de cellule [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2023
    Messages : 9
    Par défaut Problème de référence de cellule
    Bonjour,

    Je réalise la programmation d'un petit jeu de stratégie assez simple mais qui me permet de me lancer dans VBA

    J'ai réalisé la grande majorité de l'initialisation mais je tombe sur un os depuis 2 jours.
    Je me limiterais au cas de 2 jours pour plus de visibilité

    Voici la situation :

    Pour lancer le jeu, je dois cliquer sur un bouton qui m'ouvre un Userform où je peux remplir les nom des Joueurs dans des zones de textes et cliquer sur un bouton qui lance un Sub de création de plateau et de tableau. Jusque là, pas de problème, j'obtiens bien ce que je veux.
    ( Les zones de textes se nomment : TextBoxJ1 et TextBoxJ2 )

    Ma procédure créer 4 Feuilles :
    "Plateau de jeu",
    "TextBoxJ1.Text" (ici, je donne à la feuille le nom du Joueur 1),
    "TextBoxJ2.Text" (Même chose mais pour le joueur 2),
    "Conflit"

    Dans les feuilles du Joueur 1 et 2, j'ai créé un tableau avec le référencement des unités (Nom, Position, Puissance).
    Ces deux tableaux, situés sur des feuilles différentes, sont nommés "Unites_Rouge_J1" et "Unites_Bleu_J2"

    Voici donc mon problème :

    Dans la feuille "Conflit" Je souhaites regrouper dans un tableau l'ensemble des unités du Joueur 1 et 2
    Je crée donc des entêtes Unités, Position, Puissance, Couleur

    J'applique ensuite la formule suivante

    <Range("A2").Select
    ActiveCell.FormulaR1C1 = "=Unites_Rouge_J1[@[Nom_J1]]"
    Range("A2").Select
    Selection.AutoFill Destination:=Range("A2:A44"), Type:=xlFillDefault

    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=Unites_Rouge_J1[@[Position_J1]]"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B44"), Type:=xlFillDefault

    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=Unites_Rouge_J1[@[Puissance_J1]]"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C44"), Type:=xlFillDefault


    Range("D2").Select
    ActiveCell.FormulaR1C1 = "R"
    Range("D2").Select
    Selection.AutoFill Destination:=Range("D244"), Type:=xlFillDefault>


    Tout fonctionne bien et j'ai bien mon tableau qui se rempli en reprenant les valeurs du tableau de Joueur 1

    Cependant, quand j'écris ensuite

    <Range("A45").Select
    ActiveCell.FormulaR1C1 = "=Unites_Rouge_J2[@[Nom_J2]]"
    Range("A45").Select
    Selection.AutoFill Destination:=Range("A45:A87"), Type:=xlFillDefault

    Range("B45").Select
    ActiveCell.FormulaR1C1 = "=Unites_Rouge_J2[@[Position_J2]]"
    Range("B45").Select
    Selection.AutoFill Destination:=Range("B45:B87"), Type:=xlFillDefault

    Range("C45").Select
    ActiveCell.FormulaR1C1 = "=Unites_Rouge_J2[@[Puissance_J2]]"
    Range("C45").Select
    Selection.AutoFill Destination:=Range("C45:C87"), Type:=xlFillDefault


    Range("D45").Select
    ActiveCell.FormulaR1C1 = "B"
    Range("D45").Select
    Selection.AutoFill Destination:=Range("D4587"), Type:=xlFillDefault>

    Dans les cellules qui sont censées afficher les Unités Bleu, j'ai le message d'erreur "#VALEUR!"
    J'ai l'impression que c'est comme si Excel considérer que je continuais à étendre le tableau du Joueur 1...

    J'ai essayé tout ce que je pouvais, et recherchais dans les forums mais je n'ai pas trouvé réponse à mon pied.
    (J'ai essayé de définir les valeurs des Unités du Joueur 1 et 2 en tant que plage de données et pas en tant que tableau, changé la formule...)

    Voici donc ma question :

    Comment donner à une cellule la valeur d'une autre (c'est a dire que si je change la valeur de la cellule référence, l'autre change aussi (type de formule ("=B2" par exemple)) ?
    j'ai essayé de faire comme cela

    < ActiveCell.FormulaR1C1 = "=TextBoxJ2.Text!A2" >

    Mais cela ne fonctionne pas et Excel m'ouvre l'explorateur Windows pour que j'actualise mes données TextBoxJ2.Text (qui correspond au nom du joueur)

    Donc en soit la solution serait de donner à la feuille "TextBoxJ1.Text" et "TextBoxJ2.Text" toujours le nom "Joueur_1" et "Joueur_2", mais j'aimerai que les feuilles puissent se nommer comme le nom choisi par les joueurs.

    J'espère avoir été assez explicite.

    Désolé des fautes d'ortho et merci d'avance,

    Wat

    PS : Si vous pouvez me donner les balises à mettre autour du code pour qu'il s'affiche de manière plus esthétique, je suis preneur

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ai rien testé mais il est évident que la ligne ActiveCell.FormulaR1C1 = "=TextBoxJ2.Text!A2" ne peut que renvoyer une erreur.
    Utilisez la propriété Formula au lieu de FormulaR1C1
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2023
    Messages : 9
    Par défaut
    Bonjour,

    Merci pour la réponse.

    J'ai modifié ce que vous m'avez proposé. J'ai toujours le même problème (Explorateur windows qui s'ouvre en demandant d'actualiser les données de TextBoxJ2.Text)

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai toujours le même problème (Explorateur windows qui s'ouvre en demandant d'actualiser les données de TextBoxJ2.Text)
    Comme je l'ai expliqué, je n'ai pas testé mais il est évident que la propriété FormulaR1C1 n'était le bon choix pour la formule que vous vouliez insérer et le fait que Excel ouvre l'explorateur est un effet normal puisque si vous tentez de rentrer cette formule ([C]=TextBoxJ2.Text!A2[/CODE]) manuellement vous aurez le même phénomène.

    Si vous expliquiez le contexte, ce que vous avez et ce que vous voulez obtenir, ce serait plus simple pour vous aider. Manifestement vous voulez écrire dans une cellule une valeur mais d'où vient-elle car il n'y a aucune feuille semble t'il qui se nomme TextBoxJ2.Text sinon, la formule vous renverrait bien le contenu de la cellule A2 de cette feuille
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2023
    Messages : 9
    Par défaut
    Bonjour,

    Je vais réexpliquer la situation.

    Je possède deux feuilles, une pour chaque joueur. Ces feuilles se nomment du nom du Joueur 1 et du Joueur 2 rentrés par l'utilisateur en début de partie.

    ! Les feuilles changent donc de nom à chaque partie TextBoxJ1 et TextBoxJ2 sont les zones de textes du Userform où les deux joueurs ont rentrés leur nom.
    Ainsi TextBoxJ1.Text et TextBoxJ2.Text correspondent au nom des joueurs. !

    Dans ces deux feuilles, j'y ai créé un tableau comme celui qui suit. J'ai donc 1 tableau dans chaque feuilles :

    Unites_"Rouge ou Bleu" Positionnement Puissance
    Soldat_R1 Reserve_"R ou B" 2
    Soldat_R2 Reserve_"R ou B" 2

    Je nommes ces deux tableaux : "Unites_Rouge_J1" et "Unites_Bleu_J2"

    Dans une nouvelle feuille nommé "Conflit", je souhaite regrouper le contenu de ces deux tableaux dans un tableau commun, où les unités du J1 et celles duJ2 seraient mises à la suite.
    Ainsi mon tableau de la feuille conflit serait comme celui qui suit :

    Unites Positionnement Puissance
    Soldat_R1 Reserve_R 2
    Soldat_R2 Reserve_R 2
    Soldat_B1 Reserve_B 2
    Soldat_B2 Reserve_B 2


    C'est donc le regroupement des deux tableaux qui posent problème.

    Pour les Unités Rouge du Joueur 1, cela fonctionne avec cette formule : (D'ailleurs cela fonctionne avec FormulaR1C1, mais aussi avec Formula)

    [C] Range("A2").Select
    ActiveCell.FormulaR1C1 = "=Unites_Rouge_J1[@[Unites_Rouge]]"
    Range("A2").Select
    Selection.AutoFill Destination:=Range("A2:A44"), Type:=xlFillDefault [/CODE]

    Mais quand je l'utilise pour mettre les Unités Bleu en dessous de celle des rouges, comme sur le tableau plus haut, j'ai le message d'erreur #VALEUR!
    Et quand j'utilise la formule

    [C]ActiveCell.Formula =TextBoxJ2.Text!A2[/CODE]

    Cela me renvoie vers l'explorateur windows, même en utilisant Formula
    J'espère que c'est plus clair pour vous,

    Merci d'avance,

    Wat

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme je vous l'ai expliqué, cette formule fait référence (TextBoxJ2.Text!A2) à la cellule A2 de la feuille nommée TextBoxJ2.Text et si la feuille n'existe pas Excel ouvre l'explorateur windows.
    La syntaxe pour faire référence à une cellule (par exemple A2) d'une même feuille est =A2, lorsque l'on faire référence à une cellule d'une autre feuille du même classeur est NomFeuille!A2 et si c'est référence à une cellule d'un autre classeur ouvert, c'est [NomClasseur]NomFeuille!A2
    Essayez d'abord d'insérer votre formule manuellement et si elle fonctionne, vous pouvez alors l'insérer comme chaîne de caractères dans la propriété Formula de l'objet Range en VBA

    D'où vient ce .Text qui suit le nom de votre feuille ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de référence de cellule en valeur d'une autre cellule
    Par flynn dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/02/2016, 19h01
  2. Réponses: 4
    Dernier message: 30/07/2015, 13h28
  3. Problème de référence de données circulaire
    Par Wismerhill50 dans le forum Langage
    Réponses: 3
    Dernier message: 23/10/2005, 22h38
  4. LISTBOX rowsource : référence à des cellules fusionées
    Par alexxx69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/10/2005, 15h42
  5. problème de références _ptr dans une map STL
    Par Mr_Tyu dans le forum CORBA
    Réponses: 1
    Dernier message: 10/08/2004, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo