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 d'attribution formulalocal dans une cellule vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Data_Analyst
    Inscrit en
    Décembre 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Data_Analyst

    Informations forums :
    Inscription : Décembre 2020
    Messages : 35
    Par défaut Problème d'attribution formulalocal dans une cellule vba
    Bonjour,

    Je viens vous demander de l'aide car je suis bloqué.
    j'ai une plage que je déclare en tant que range . Je déclare un tableau de meme taille que ma plage. Je fais ensuite une boucle pour attribuer la formule de chaque cellule à celle du tableau que j'ai nommé. Sauf que au lieu de prendre en compte formulaLocal, il m'affiche la valeur de la cellule. Explication avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Plage1(1 to 3) as Range
               Dim Plage2() As String
    
                redim Plage2(1 to 3)
    Plage2(1)= "=RECHERCHERV...."
    Plage2(2)= "=RECHERCHERV...."
    Plage2(3)= "=RECHERCHERV...."
    set plage1(1) = Range("A1")
    set plage1(2) = Range("A2")
    set plage1(3) = Range("A3")
    For i 1 to 3
    plage1(i).Formulalocal = plage2(i)
    next i
    l'erreur est sur la ligne en rouge: si je fais msgbox(plage1(i).Formulalocal), il m'affiche la valeur de la cellule A1. Par contre , si je fais Range("A1").Formulalocal = plage1(1), ça fonctionne. Donc je ne sais vraiment pas quoi faire pour que ça marche. Ca doit être une question de syntaxe mais bon, je donne ma langue au chat.
    Merci pour votre aide

  2. #2
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 078
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Je ne sais pas si c'est une faute de frappe mais RECHERCHERV n'est pas un nom de fonction valide (RECHERCHEV oui)

    sinon je viens de tester ce code sans plantage chez moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub test()
    Dim Plage1(1 To 3) As Range, i As Integer
               Dim Plage2() As String
     
                ReDim Plage2(1 To 3)
    Plage2(1) = "=RECHERCHEV(B1;Z12:Z15;2;FAUX)"
    Plage2(2) = "=RECHERCHEV(B1;Z12:Z15;2;FAUX)"
    Plage2(3) = "=RECHERCHEV(B1;Z12:Z15;2;FAUX)"
    Set Plage1(1) = Range("A1")
    Set Plage1(2) = Range("A2")
    Set Plage1(3) = Range("A3")
    For i = 1 To 3
    Plage1(i).FormulaLocal = Plage2(i)
    Next i
    End Sub
    :bug:

  3. #3
    Membre averti
    Homme Profil pro
    Data_Analyst
    Inscrit en
    Décembre 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Data_Analyst

    Informations forums :
    Inscription : Décembre 2020
    Messages : 35
    Par défaut
    Bonjour, de mon côté j'ai l'erreur d'excution 1004 sur la ligne en rouge. c'est bizarre, c'est comme si il n'acceptait pas cette syntaxe car si je fais un msgbox(Plage1(i).FormulaLocal) et msgbox(Plage2(i)), il m'affiche la valeur, mais il ne veut pas executer l'implémentation. Comment faire ?

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    975
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 975
    Par défaut
    Tu as remarqué que tu avais oublié le signe = à la ligne For i 1 to 3 ? Donc plage1(i) posera problème.

  5. #5
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 078
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    FormulaLocal crée une fonction dans la langue d'Excel
    Comme Excel est en français, on écrit les fonctions en français
    Est-ce que votre Excel est en français ?

    Qu'est-ce que ça donne si vous faites
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox Plage1(i).Formula
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox Plage1(i).FormulaR1C1
    Pour les formules matricielles (qui s'étendent) il faudra plutôt utiliser un Formula2Local ou un Formula2 ou un Formula2R1C1
    La formule est-elle matricielle ?
    :bug:

  6. #6
    Membre averti
    Homme Profil pro
    Data_Analyst
    Inscrit en
    Décembre 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Data_Analyst

    Informations forums :
    Inscription : Décembre 2020
    Messages : 35
    Par défaut
    Citation Envoyé par tototiti2008 Voir le message
    Bonjour,

    FormulaLocal crée une fonction dans la langue d'Excel
    Comme Excel est en français, on écrit les fonctions en français
    Est-ce que votre Excel est en français ?

    Qu'est-ce que ça donne si vous faites
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox Plage1(i).Formula
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox Plage1(i).FormulaR1C1
    Pour les formules matricielles (qui s'étendent) il faudra plutôt utiliser un Formula2Local ou un Formula2 ou un Formula2R1C1
    La formule est-elle matricielle ?
    Mon Excel est en français. Avec FormulaLocal, il m'affiche ma fonction en français. Avec Formula, il affiche la meme fonction en anglais et avec FormulaR1C1, il affiche dans cette langage un peu bizarre. l'affichage se fait correctement, ça m'affiche la bonne fonction mais c'est l'implémentation qui ne fonctionne pas. En faite, je veux pouvoir modifier une valeur en cellule puis afficher cette valeur à partir d'une fonction recherchev à partir d'un tableau où j'ai enregistrer la nouvelle valeur saisie par l'utilisation. Par contre, si au lieu d'utiliser Plage1(i).FormulaLocal = Plage2(i) , je fais Range("A1").FormulaLocal=Plage2(1), ça fonctionne il n'y a pas d'erreur d'execution 1004. Dans les option d'Excel, j'ai activé les option d'execution de macro avec Excel 4 et j'ai aussi coché "Accès confidentiel au modèle d'objet du projet VBA".Par contre j'ai remarqué quelque chose, ma formule est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     =SI(ET(D21=0;E21=0;F21=0;G21=0;H21=0;I21=0);"";$F$58)
    Si je fais un msgbox Plage1(i), la fenetre m'affiche la fonction avec juste " au lieu de "" après le Si. Je crois qu'il ne considère pas ma fonction comme correcte. Comment faire ?

  7. #7
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 078
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    je ne comprend pas
    je viens d'essayer la macro suivante chez moi sans soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test1()
        Range("A1").FormulaLocal = "=SI(ET(D21=0;E21=0;F21=0;G21=0;H21=0;I21=0);"""";$F$58)"
    End Sub
    :bug:

  8. #8
    Invité de passage
    Homme Profil pro
    Ergonome
    Inscrit en
    Avril 2025
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Avril 2025
    Messages : 1
    Par défaut Texte qui déborde dans une cellule excel
    Bonjour
    Jai besoin d'une macro qui empêcherait le texte de déborder sur le côtés. Je ne peux pas utiliser le renvoi à la ligne car cela modifie l'apparence de mon tableau. Y a des cellules ou on a beaucoup de texte .Ce texte alimente un base de donnée dans un même fichier avec plusieurs macros. Si quelqu'un a une idée, je le ou la remercierais d'avance

  9. #9
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 018
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 018
    Par défaut
    Bonjour

    Il faut créer un nouveau sujet plutôt que de poser ta question directement sur le sujet de quelqu'un d'autre.

    Pour ton problème essai de sélectionner tes cellules, de faire un clique droit... Format de Cellule...Alignement... Et choisir "Justifier"pour l'alignement horizontal.

    Si cette réponse ne résout pas le problème, merci de ne pas répondre ici et de créer un nouveau sujet dans le forum Macros et VBA Excel.

    @Qvn83 : Désolé pour l'incursion...
    Pour ton problème as tu essayé de spécifier la propriété à utiliser sur le membre de droite?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plage1(i).FormulaLocal = Plage2(i).FormulaLocal
    VBA est un code verbeux, si on ne lui précise pas exactement ce qu'on veut, il utilise des propriétés par défaut (au lieu de carrément planter). De ce fait, on peut penser que le code fait "ce qu'on veut" mais en fait si on ne spécifie pas, dans le cas d'un range, c'est la propriété Value qui est utilisée par défaut.

    En faite, je veux pouvoir modifier une valeur en cellule puis afficher cette valeur à partir d'une fonction recherchev à partir d'un tableau où j'ai enregistrer la nouvelle valeur saisie par l'utilisation.
    Uff.
    Sur le début, je crois comprendre que tu as une cellule qui te retourne le nom d'une cellule et que tu veux modifier la cellule dont l'adresse est inscrite dans la cellule contenant la formule... C'est ça?
    Dans ce cas il faut t'orienter sur un code de ce type
    Feuil1.range(Feuil1..range("A1").value).Value = "MaValeur"
    Ici on travaille sur la feuil1 (codeName des feuilles présent dans les propriété F4 dans l'environnement VBA en sélectionnant la feuille dans l'arborescence du fichier)
    Nom : 2015-01-18_134906.png
Affichages : 17
Taille : 14,2 Ko
    La cellule A1 contient la formule qui retourne une adresse de cellule. La cellule ciblé par cette adresse est modifiée pour inscrire à l'intérieur la chaine "MaValeur"

    Si tu veux faire une rechecheV (regarde quand même du coté de Index + Equiv, RecherchV c'est pas top), tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.range(Feuil1..range("A1").value).Value
    pour obtenir la valeur de la cellule dont l'adresse est précisée en A1

    Il est ensuite possible d'incorporer cette valeur dans la formule que tu veux mettre en place dans une autre cellule
    Plage2(3) = "=RECHERCHEV(" & Feuil1.range(Feuil1..range("A1").value).Value & ";Z12:Z15;2;FAUX)"

    Si ça n'est pas ça, le mieux serait de faire un fichier démo.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Recherche d'un mot dans une cellule VBA
    Par psg7835 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/07/2017, 10h02
  2. Insérer formule dans une cellule VBA
    Par maxoumax dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/03/2016, 15h03
  3. Insérer du texte dans une cellule vba
    Par jucva dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/09/2015, 14h30
  4. Insérer du texte dans une cellule vba
    Par jucva dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/09/2015, 14h01
  5. [VBA-E]modifier les attributs d'un commentaire dans une cellule
    Par Olivier vb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/03/2004, 10h26

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