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 :

VBA - Excel - Créer une variable tableau persistante


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2023
    Messages : 6
    Par défaut VBA - Excel - Créer une variable tableau persistante
    Bonjour,

    Controleur de gestion, je vous présente probablement un grand classique que j'ai traité avec mes quelques connaissances et que je souhaiterais aujourd'hui rationnaliser.

    Input : je reçois un fichier plat tous les mois avec par ex : id_ste, id_mois, id_type (réel ou budget), id_compte, valeur

    Aujourd'hui je me branche sur ce fichier avec un tcd, et je vais chercher avec une fonction personnalisée @mafonction la valeur selon les critères renseignés.

    Set b = Sheets(NomBase).PivotTables("TCD").GetPivotData(valeur, id_ste, id_mois, id_type, id_compte)

    ValeurMafonction = b.Value

    mafonction = ValeurMafonction

    Voilà les évolutions que je souhaiterais faire :

    1- plutot que de créer un tcd, appeler le fichier txt et l'afficher dans un onglet "proprement" => ça c'est ok ;-)

    2- à l'ouverture du fichier, initialiser une variable tableau qui lirait cet onglet et stockerait les résultats

    3- restituer cette valeur à chaque appel de mafonction(id_site, id_mois, id_type, id_compte)

    4- contrainte, si certains champs ne sont pas renseignés faire la somme de valeur (ex : s'il n'y a pas de mois sommer tous les mois)

    J'espère avoir été clair dans l'expression du besoin.

    Merci par avance de votre aide.

    Le top du top serait de pouvoir se passer de l'onglet qui lit le fichier texte et se brancher directement sur ce dernier, mais ça limite la portabilité de mon fichier (le destinataire n'a pas forcément acces au fichier texte)

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, voici mon idée. Je considère donc que les données du fichier texte se trouvent sur la feuille "NomBase".
    Voici une macro qu'il faut appeler à l'ouverture du classeur et qui charge les données dans un tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Donnees As Variant
     
    Sub ChargerDonnees()
        ' Charger les données de la feuille de calcul dans le tableau
        Donnees = Sheets("NomBase").UsedRange.Value
    End Sub
    Ensuite la fonction pour calculer les totaux:

    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
    20
    Function MaFonction(id_ste As String, id_mois As String, id_type As String, id_compte As String) As Double
        Dim Total As Double
        Dim i As Long
     
        ' Initialiser le total
        Total = 0
     
        ' Parcourir les données et calculer la somme en fonction des critères
        For i = LBound(Donnees, 1) To UBound(Donnees, 1)
            If (id_ste = "" Or Donnees(i, 1) = id_ste) And _
               (id_mois = "" Or Donnees(i, 2) = id_mois) And _
               (id_type = "" Or Donnees(i, 3) = id_type) And _
               (id_compte = "" Or Donnees(i, 4) = id_compte) Then
                Total = Total + Donnees(i, 5)
            End If
        Next i
     
        ' Retourner le total
        MaFonction = Total
    End Function

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2023
    Messages : 6
    Par défaut
    Bonjour Franc,

    Quelle fulgurance, je ne m'attendais pas à un retour si rapide, merci infiniment.

    J'ai l'impression de recevoir un cadeau de Noël, votre script est probablement le sésame que j'ai toujours rêvé de faire...

    Je n'ai pas dû faire les bons copier coller, la fonction renvoie "#valeur".

    En pièce jointe le jeu de test.XLS_RESULTATS.xlsm

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Ou alors je n'ai pas bien compris. En cellule B5 de ta feuille "Resultats", quel est le résultat attendu et par quelle opération est-il obtenu ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2023
    Messages : 6
    Par défaut
    Dans l'exemple (id_ste = 1;mois = 1; type="R"; compte = 601000) = 4

    Si le compte n'est pas renseigné (id_ste = 1;mois = 1; type="R"; compte = TOUS) = 15 (4+11)

    Si le mois et le compte n'est pas renseigne (id_ste = 1 & id_type="R") = 16 (4+1+11)

    Si rien n'est renseigné = 84

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2023
    Messages : 6
    Par défaut
    Bonjour Franc,

    Votre script fonctionne.

    Seul hic, ma façon de charger la variable Donnees, j'ai copier coller la sub ChargerDonnees dans WorkbookOpen

    Private Sub Workbook_Open()

    Donnees = Sheets("NomBase").UsedRange.Value

    End Sub

    Mais la variable soit n'est pas chargée soit n'est pas persistante...

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/11/2015, 10h32
  2. Créer une variable globale de type tableau
    Par beegees dans le forum Langage
    Réponses: 1
    Dernier message: 27/10/2008, 00h26
  3. [Tableaux] récuperer une variable tableau passé par URL
    Par molesqualeux dans le forum Langage
    Réponses: 2
    Dernier message: 23/12/2005, 01h12
  4. [JDOM] Créer une variable xml directement dans java
    Par Tigrounette dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 18/12/2005, 14h21
  5. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55

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