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 recalcul fichier Excel avec fonctions VBA [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 75
    Points : 48
    Points
    48
    Par défaut Problème recalcul fichier Excel avec fonctions VBA
    Bonjour à tous,

    J'ai un problème avec un de mes fichiers Excel, je m'explique.
    Celui-ci contient une fonction GetValue (qui en gros, effectue un index + equiv), fonction ensuite utilisée maintes et maintes fois dans le fichier.

    Pour recalculer le fichier (appelons le fichier A), j'effectue souvent un F9 car c'est en calcul manuel.
    Cependant, quand j'effectue un F9 sur un autre fichier Excel quelconque ouvert en parallèle (sur un fichier B), le fichier A me sort des #VALEUR sur TOUTES les cellules contenant ma formule GetValue.
    Je suis alors contraint d'effectuer un CTRL + ALT+ F9 afin d'obtenir mes résultats sur le fichier A.

    Auriez-vous une idée de pourquoi ? et encore mieux, comment pourrais-je résoudre ce problème assez contraignant ?? temps de calcul assez long ..

    Je vous remercie,

    Julien

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Bonjour,

    Quel est le code de ta fonction GetValue car "en gros" cela ne me dit pas grand chose je ne vois pas par exemple si tu utilise des objets range, sheet, cells... sans préciser leur parent..

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Pas de soucis, voici le code complet de la fonction :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Public Function GetValue(ByVal NomTable As String, ByVal NomEntite As Variant, ByVal NomChamp As Variant, Optional ByVal NumCoChampEntite As Integer = 1) As Variant
    Dim Table As Variant: Table = Range(NomTable).Value
    Dim NbLi As Integer: NbLi = UBound(Table, 1)
    Dim NbCo As Integer: NbCo = UBound(Table, 2)
    Dim i As Integer, j As Integer
    Dim NumLi As Integer: NumLi = 0
    Dim NumCo As Integer: NumCo = 0
    If NomEntite = "" Or NomChamp = "" Then
        GoTo 0
    Else
        For i = 2 To NbLi
            If NomEntite = Table(i, NumCoChampEntite) Then
                NumLi = i
                Exit For
            End If
        Next i
        For j = 1 To NbCo
            If NomChamp = Table(1, j) Then
                NumCo = j
                Exit For
            End If
        Next j
        If (NumLi = 0) Or (NumCo = 0) Then
            GetValue = "La valeur recherchée ne figure pas dans la table"
        Else
            GetValue = Table(NumLi, NumCo)
        End If
    End If
    Exit Function
    0:
        GetValue = 0
    End Function

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    re,

    ben dés la première ligne de code tu utilise Range sans préciser à qu'elle feuille il appartient.. et donc Excel utilise la feuille active d'ou tes problèmes lorsque tu effectue un recalcul après avoir changé de feuille active..

    lorsque tu utilise range il faut toujours le précéder de ses parents (classeurs et feuille...)


    De plus je pense que tu gagnerais à transformer en range ton paramètre NomTable

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Yes ça marche merci beaucoup. j'avais fait comme ça car NomTable est une zone nommée dynamique construite via formule, mais l'onglet de celle-ci ne change pas en effet \o/

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 18/02/2015, 00h15
  2. Réponses: 3
    Dernier message: 05/02/2010, 16h09
  3. comment enregistrer un fichier excel avec le vba
    Par zaki_1982 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/04/2008, 18h09
  4. créer un fichier excell avec VBA(access)
    Par JCH dans le forum Access
    Réponses: 1
    Dernier message: 19/09/2006, 19h07
  5. [VBA]Envoyer un fichier excel avec OutLook
    Par Sunchaser dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/02/2006, 16h24

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