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 :

Écriture dynamique dans Cells.Formulalocal(..)


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    ingénieur énergie
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : ingénieur énergie
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut Écriture dynamique dans Cells.Formulalocal(..)
    Bonjour,

    Je voudrais faire une boucle pour écrire une formule dans chaque cellule d'un tableau (chaque formule étant différente). La formule utilise SOMME.SI.ENS() de excel.

    Voici le code que j'ai essayé, sans succès

    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
    16
    17
    18
    19
    Sub RempliTablo()
    ' Ecrit les formules sur la page excel directement
    ' Ces formules iront chercher les références des différentes plages.
     
    Dim Lig As Integer, Sh As Sheets
    Set Sh = Sheets("BDD_matériels")
    Lig = Sheets("BDD_matériels").Range("A10000").End(xlUp).Row
     
    With Range("tab_usages_contrats")
        For i = 1 To Nbre_contrats ' nbre_contrats et nbre_usages sont des variables globales (Integer)
            For j = 1 To Nbre_usages
                .Cells(i + 1,j+1).Formulalocal=" _
                =somme.si.ens("Sh.range(cells(2, 17), cells(lig, 17)) & ";" _
                & Sh.Range(Cells(2, 6),cells(lig, 6)) & ";" & .Cells(i+1, 1) _
                & ";" & Sh.Range(cells(2, 3), cells(lig, 3)) &  ";" & .Cells(1, j+1) & ")"
            Next j
        Next i
    End With
    End Sub
    Je pourrai remplir le tableau directement en enlevant la formule et en mettant à la place une macro qui marcherait mais y a 2 contraintes :
    1- La taille du tableau n'est pas fixe (il y a "nbre_contrats"+1 lignes et "nbre_contrats"+1 colonnes)
    2- Les données qui se trouvent dans la feuille "BDD_matériels" peuvent changer, et le tableau doit se remplir automatiquement à ce moment là.

    Vu que l'utilisation de formules marche bien pour ce cas là, je me suis un peu renseigné et j'ai trouvé "formulalocal" (qui a l'avantage de pas avoir à changer de langage par rapport à "formula").
    Mais ça coince et j'arrive pas à bien l'utiliser.

    Merci d'avance pour votre aide !

    Renardor

  2. #2
    Membre expérimenté Avatar de lucasgaetan
    Homme Profil pro
    dessinateur BE
    Inscrit en
    Août 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 175
    Par défaut
    bonjour,
    sans avoir regarde ton code en profondeur, essaie de remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Cells(i + 1,j+1).Formulalocal=" _
                =somme.si.ens("Sh.range(cells(2, 17), cells(lig, 17)) & ";" _
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Cells(i + 1,j+1).Formulalocal= _
                "=somme.si.ens("Sh.range(cells(2, 17), cells(lig, 17)) & ";" _
    --> j'ai juste mis le guillemet devant le =

    je pense qu'il y a d'autre erreur de ce type: le guillemet en vb se dit : Chr(13)

    sans certitude
    a+

  3. #3
    Membre averti
    Homme Profil pro
    ingénieur énergie
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : ingénieur énergie
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut
    Je viens d'essayer mais ça ne marche pas non plus (:

  4. #4
    Membre expérimenté Avatar de lucasgaetan
    Homme Profil pro
    dessinateur BE
    Inscrit en
    Août 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 175
    Par défaut
    et ça ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                .Cells(i + 1,j+1).Formulalocal= _
                "=somme.si.ens(" & Sh.range(cells(2, 17), cells(lig, 17)) & ";" _
                & Sh.Range(Cells(2, 6),cells(lig, 6)) & ";" & .Cells(i+1, 1) _
                & ";" & Sh.Range(cells(2, 3), cells(lig, 3)) &  ";" & .Cells(1, j+1) & ")"
            Next j
        Next i
    End With
    End Sub
    sinon pour vérifier se que tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With Range("tab_usages_contrats")
    i = 5 ' pour l'exemple
    j=3
    debug.print Sh.range(cells(2, 17), cells(lig, 17))
    debug.print  Sh.Range(Cells(2, 6),cells(lig, 6))
    debug.print .Cells(i+1, 1)
    debug.print Sh.Range(cells(2, 3), cells(lig, 3))
    debug.print .Cells(1, j+1) 
     
    'puis le rete du code
        For i = 1 To Nbre_contrats ' nbre_contrats et nbre_usages sont des variables globales (Integer)
     '.....
    regarde ou ça bug en pas a pas

  5. #5
    Membre averti
    Homme Profil pro
    ingénieur énergie
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : ingénieur énergie
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut
    Une bonne et une mauvaise nouvelle :

    Ta première astuce fonctionne (avec le & juste après "=somme.si.ens") :la formule ne s'affiche plus en rouge, c'est déjà ça, au moins la syntaxe est correcte, merci !

    Par contre quand je lance la procédure avec ton affichage de débuggage (ou pas d'ailleurs), il me met une erreur de compilation : " Membre de méthode ou de données introuvable"

    Je sais pas du tout d'où ça peut venir. En plus comme ç'est une erreur de compilation, je peux pas lancer la procédure pas à pas

  6. #6
    Membre expérimenté Avatar de lucasgaetan
    Homme Profil pro
    dessinateur BE
    Inscrit en
    Août 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 175
    Par défaut
    essaie avec ça ,
    tu testes puis enlèves l'apostrophe d'une ligne et tu retestes ect
    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
    16
    17
    Sub RempliTablo()
    ' Ecrit les formules sur la page excel directement
    ' Ces formules iront chercher les références des différentes plages.
     
    Dim Lig As Integer, Sh As Sheets
    Set Sh = Sheets("BDD_matériels")
    Lig = Sheets("BDD_matériels").Range("A10000").End(xlUp).Row
    With Range("tab_usages_contrats")
    i = 5 ' pour l'exemple
    j=3
    debug.print Sh.range(cells(2, 17), cells(lig, 17))
    'debug.print  Sh.Range(Cells(2, 6),cells(lig, 6))
    'debug.print .Cells(i+1, 1)
    'debug.print Sh.Range(cells(2, 3), cells(lig, 3))
    'debug.print .Cells(1, j+1) 
    end whit
    end sub
    regardes ici : http://cafeine.developpez.com/access...el/debugprint/

Discussions similaires

  1. Ecriture dynamique dans la page actuelle
    Par fantomasmusic dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 19/04/2005, 12h23
  2. écritures concurrentes dans un fichier
    Par djmalo dans le forum C
    Réponses: 9
    Dernier message: 06/03/2005, 01h45
  3. [jsp] include dynamique dans une jsp
    Par petitelulu dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/03/2005, 07h59
  4. Réponses: 6
    Dernier message: 24/09/2004, 13h10
  5. [D7] Tableaux dynamiques dans un record
    Par bobby-b dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2004, 23h23

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