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 syntaxe VBA [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 15
    Par défaut Problème de syntaxe VBA
    Bonjour à tous,
    j'ai une ligne de code qui fonctionne parfaitement (office 64)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("Base_de_données!BS" & L).FormulaArray = "=INDEX(Tarifs_et_CO2!$D$2:$D$40,match(1,(Tarifs_et_CO2!$A$2:$A$40=Tarifs_et_CO2!$A45)*(Tarifs_et_CO2!$C$2:$C$40=Tarifs_et_CO2!$C$45)*(Tarifs_et_CO2!$E$2:$E$40=Tarifs_et_CO2!$D$45),0))"
    je voudrais "simplement" mettre une cellule variable à la place de ma cellule fixe A45
    cette cellule variable correspond à la colonne F où est saisie une donnée année et à la ligne L qui est une variable et qui correspond à la dernière ligne de saisie de la base de donnée des différents véhicules.
    j'ai déjà essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Range("Base_de_données!BS" & L).FormulaArray = "=INDEX(Tarifs_et_CO2!$D$2:$D$40,match(1,(Tarifs_et_CO2!$A$2:$A$40="Base_de_données!F" & L)*(Tarifs_et_CO2!$C$2:$C$40=Tarifs_et_CO2!$C$45)*(Tarifs_et_CO2!$E$2:$E$40=Tarifs_et_CO2!$D$45),0))"
    
    Range("Base_de_données!BS" & L).FormulaArray = "=INDEX(Tarifs_et_CO2!$D$2:$D$40,match(1,(Tarifs_et_CO2!$A$2:$A$40='Base_de_données!F' & L)*(Tarifs_et_CO2!$C$2:$C$40=Tarifs_et_CO2!$C$45)*(Tarifs_et_CO2!$E$2:$E$40=Tarifs_et_CO2!$D$45),0))"
    
    Range("Base_de_données!BS" & L).FormulaArray = "=INDEX(Tarifs_et_CO2!$D$2:$D$40,match(1,(Tarifs_et_CO2!$A$2:$A$40=Base_de_données!F&L)*(Tarifs_et_CO2!$C$2:$C$40=Tarifs_et_CO2!$C$45)*(Tarifs_et_CO2!$E$2:$E$40=Tarifs_et_CO2!$D$45),0))"
    j'ai aussi essayé en y retirant/ajoutant des espaces, en mettant les "" à différents endroits... sans succès jusqu'alors...
    d'avance merci !!

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,

    Il serait utile d'avoir la ligne de code qui donne la valeur de L, ainsi que le message d'erreur que tu obtient


    Sinon dans ta première formule tu vas A45 sur la feuille Tarifs_et_CO2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ,(Tarifs_et_CO2!$A$2:$A$40=Tarifs_et_CO2!$A45)*(
    Mais dans les autres tu a changé pour la feuille Base_de_données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Tarifs_et_CO2!$A$2:$A$40="Base_de_données!F" & L)
    C'est normal ?

    Sans changé de feuille et en supposant que L à une valeur cohérente je l'écrirais comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Base_de_données!BS" & L).FormulaArray = "=INDEX(Tarifs_et_CO2!$D$2:$D$40,match(1,(Tarifs_et_CO2!$A$2:$A$40=Tarifs_et_CO2!$A" & L & ")*(Tarifs_et_CO2!$C$2:$C$40=Tarifs_et_CO2!$C$45)*(Tarifs_et_CO2!$E$2:$E$40=Tarifs_et_CO2!$D$45),0))"
    (note comme la coloration syntaxique du site met bien en texte toute la formule sauf le L variable)


    Si tu changes le 45 de A45 en variable, Est-ce normal de laisser en dur le D$45 en fin de formule ?
    Même question pour tes autres plages qui se finissent en ligne 40.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 15
    Par défaut
    Bonjour Halaster08,

    Citation Envoyé par halaster08 Voir le message
    Il serait utile d'avoir la ligne de code qui donne la valeur de L, ainsi que le message d'erreur que tu obtient
    voici la définition du L qui me permet juste de déposer le resultat de ma formule sur la dernière ligne de ma feuille base de donnée
    L = Sheets("Base_de_données").Range("b65636").End(xlUp).Row + 1

    Citation Envoyé par halaster08 Voir le message
    Sinon dans ta première formule tu vas A45 sur la feuille Tarifs_et_CO2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ,(Tarifs_et_CO2!$A$2:$A$40=Tarifs_et_CO2!$A45)*(
    Mais dans les autres tu a changé pour la feuille Base_de_données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Tarifs_et_CO2!$A$2:$A$40="Base_de_données!F" & L)
    C'est normal ?
    oui oui c'est normal, je récupère l'information de cible "Année" dans ma base de donnée et non plus sur ma feuille tarif comme je le faisais au début, le temps de vérifier ma formule

    Citation Envoyé par halaster08 Voir le message
    Sans changé de feuille et en supposant que L à une valeur cohérente je l'écrirais comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Base_de_données!BS" & L).FormulaArray = "=INDEX(Tarifs_et_CO2!$D$2:$D$40,match(1,(Tarifs_et_CO2!$A$2:$A$40=Tarifs_et_CO2!$A" & L & ")*(Tarifs_et_CO2!$C$2:$C$40=Tarifs_et_CO2!$C$45)*(Tarifs_et_CO2!$E$2:$E$40=Tarifs_et_CO2!$D$45),0))"
    (note comme la coloration syntaxique du site met bien en texte toute la formule sauf le L variable)
    Parfait merci !! En effet comme cela, ça marche !!
    note que je ne comprends pas bien pourquoi mais bon ...


    Citation Envoyé par halaster08 Voir le message
    Si tu changes le 45 de A45 en variable, Est-ce normal de laisser en dur le D$45 en fin de formule ?
    Même question pour tes autres plages qui se finissent en ligne 40.
    Tu as tout à fait raison... en fait je suis parti du principe que si on m'indiquait comment bien écrire la formule pour la plage des A alors je l'appliquerai de la même façon pour les plages C et E!!
    (et comme tu as vraiment le regard très affuté, il en s'agit pas d'une erreur le fait que dans la dernière condition, l'égalité se fasse entre une plage E et une valeur en case D...)

    En tout cas merci beaucoup de ton aide !

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par yaourt62 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L = Sheets("Base_de_données").Range("b65636").End(xlUp).Row + 1
    Attention depuis 2007 Excel peut largement dépassé les 65636 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L = Sheets("Base_de_données").Range("b"& rows.count).End(xlUp).Row + 1

    Parfait merci !! En effet comme cela, ça marche !!
    note que je ne comprends pas bien pourquoi mais bon ...
    Une formule c'est du texte, pour que vba l'identifie comme du texte il faut que ça commence et que ça termine par un guillemet "
    Pour insérer une variable on utilise l'opérateur de concaténation &, puis on indique la variable, puis si besoin on remet l'opérateur et le reste de la formule

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 15
    Par défaut
    Bonsoir et merci encore Halaster08
    En effet je ne savais pas que la limite des 65636 lignes avait été repoussée (je devrais utiliser, pour ce projet, au maximum une centaine de lignes...) du coup je vais pouvoir améliorer mon code grâce à toi !
    et merci également pour le rappel pour les "" je manque d'aisance pour leur utilisation mais bon en pratiquant davantage je devrais y parvenir plus facilement
    Bonne soirée

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/01/2018, 17h51
  2. [WD20] Problème de syntaxe : Vba --> Windev
    Par sebinator dans le forum WinDev
    Réponses: 4
    Dernier message: 15/06/2015, 23h59
  3. [AC-2003] Problème de syntaxe VBA
    Par Cerisier dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/07/2010, 12h15
  4. Problème de syntaxe VBA SQL
    Par Levon dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/02/2008, 11h25
  5. [VBA-Excel] Problème de syntaxe pour lien hypertexte
    Par matt8-5 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/01/2007, 11h23

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