[Excel VBA] Fonction devant être rafraichie dans chaque case

Répondre
Partager Rechercher
Bonjour,

J'ai une feuille excel avec plein de calculs dedans, et j'ai eu besoin d'utiliser une fonction personnalisée créée dans VBA.
J'utilise ma feuille, tout fonctionne, tout va bien.
Il y a des cases dans la feuille qui ont la fonction, et elles fonctionnent.

Par contre, quand je ferme le fichier xlsm et que je le réouvre, tout se met en #value ! Evidemment la feuille ne fonctionne plus.
Pour la refaire marcher, je dois aller dans chaque case où j'ai mis la fonction, et simplement cliquer sur la formule et "entrer" pour forcer la cellule à se recalculer.
Le #value disparait et je dois recommencer ça sur toutes les autres cellules ensuite..

Comment faire pour résoudre ce problème ?

Merci
Citation :
Publié par Eden Paradise
Bonjour,

J'ai une feuille excel avec plein de calculs dedans, et j'ai eu besoin d'utiliser une fonction personnalisée créée dans VBA.
J'utilise ma feuille, tout fonctionne, tout va bien.
Il y a des cases dans la feuille qui ont la fonction, et elles fonctionnent.

Par contre, quand je ferme le fichier xlsm et que je le réouvre, tout se met en #value ! Evidemment la feuille ne fonctionne plus.
Pour la refaire marcher, je dois aller dans chaque case où j'ai mis la fonction, et simplement cliquer sur la formule et "entrer" pour forcer la cellule à se recalculer.
Le #value disparait et je dois recommencer ça sur toutes les autres cellules ensuite..

Comment faire pour résoudre ce problème ?

Merci
c est surement que la cellule croit etre un texte a lieu d une formule essaye de remplacer = par =
tu as besoin de garder la macro ? si non enregistre en xlsx
Remplacer = par = ? C'est le même caractère, non ?

J'ai essayé de réécrire la formule, ça n'arrange rien.
J'ai essayé le format général au lieu de texte, ça ne change rien.

Et la seule manière que j'ai trouvé de faire marcher la fonction, c'est de cliquer manuellement dans chaque case et d'appuyer sur entrée pour forcer le recalcul.

Evidemment c'est le type de problème insoluble avec une simple recherche google car les mots clés ne sont pas interprétés correctement ou alors je n'arrive pas à mettre les bons, le problème est difficilement descriptible par mots clés simplement.
Remplacer = par = ? C'est le même caractère, non ?

oui mais c est une astuce d excel qui arrange des choses (ca oblige a reecrire la formule par excel comme si tu fait a la main mais sur toute la feuille en 1x)

si ca marche tu enregistre en xlmx et tu reouvre si xxca marche pas tu recommence et enregistre en xlxs



comme remplacer ' par ' pour faire disparaitre le premier ' d une cellule et rendre la cellule en format texte


bon si ca marche pas tu copie une cellule vide tu colle special sur toute la fonction avec addition puis tu remplace = par =

Dernière modification par cricri ; 27/10/2019 à 21h04.
Citation :
Publié par Melchiorus
Et si tu fais F9, est-ce que cela recalcule toutes les cellules ? (j'ai supposé que tu utilisais Microsoft Excel)
Bizarrement, non !
La seule manière c'est d'entrer dans la formule et d'y taper entrée.
Citation :
Publié par Eden Paradise
Bizarrement, non !
La seule manière c'est d'entrer dans la formule et d'y taper entrée.
t as essayer toute mes methodes ? l enregistrer sous xlsx ??
si j avais la bonne version d xls je pourais te le faire mais je reste en version 2003 tellement plus rapide les macros sous 2003
Citation :
Publié par cricri
t as essayer toute mes methodes ? l enregistrer sous xlsx ??
si j avais la bonne version d xls je pourais te le faire mais je reste en version 2003 tellement plus rapide les macros sous 2003
En xlsx ça ne pourra pas fonctionner car je fais appel à une fonction vba.
Au passage, cette fonction vba doit faire référence à deux colonnes de cellule et à une colonne.
c est les fonctions ecrite par la macro qui marche pas ??

montre un exemple de code qui ecrit dans une cellule autre astuce cells(4,5)=cells(5,8) + cells(9,4)+0 rajoute le +0 pour forcer le format de la cellule ou
cells(4,5)=(cells(5,8) + cells(9,4))*1
Citation :
Publié par cricri
c est les fonctions ecrite par la macro qui marche pas ??

montre un exemple de code qui ecrit dans une cellule autre astuce cells(4,5)=cells(5,8) + cells(9,4)+0 rajoute le +0 pour forcer le format de la cellule ou
cells(4,5)=(cells(5,8) + cells(9,4))*1
Les fonctions de la macro fonctionnent très bien en elles mêmes, c'est simplement qu'elles ne fonctionnent pas quand j'ouvre le workbook, elles fonctionnent si je les tape directement ou bien si je les force à se recharger en appuyant sur entrée dans la formule.
La ligne, c'est à dire ?
=Interp_lin('-Calcul-Geometrie-'!$B$6:B$30;'-Calcul-Geometrie-'!C$6:C$30;B39)

J'ai essayé de mettre +0 également ça ne fonctionne pas.

Et la macro c'est :
Code:
Public Function Interp_lin(abscisses, ordonnees, x) As Double
Application.Volatile

Dim Size As Integer, i As Integer, Count As Integer, ls As Integer, li As Integer
Dim xx() As Double, yy() As Double

    If TypeName(x) = "Range" Then
        x = CDbl(x.Value)
    End If

    If (TypeName(abscisses) = "Range") And (TypeName(ordonnees) = "Range") Then
        If (abscisses.Count = ordonnees.Count) Then
            Count = abscisses.Count - 1
            ReDim xx(Count)
            ReDim yy(Count)
            i = 0
            For Each Value In abscisses
                xx(i) = Value.Value
                i = i + 1
            Next Value '2019 valeur -> value
            
'            For i = 0 To abscisses.Count
'                xx(i) = abscisses.Value2(i + 1, 1)
'            Next i
'            For i = 0 To Len(ordonnees)
'                yy(i) = ordonnees(i).Value2(i + 1, 1)
'            Next i
            i = 0
            For Each Value In ordonnees 'avant il y avait for each valeur .. valeur.value
                yy(i) = Value.Value
                i = i + 1
            Next Value
        Else
            Exit Function
        End If
    ElseIf IsArray(abscisses) And IsArray(ordonnees) And ((UBound(abscisses) - LBound(abscisses)) = (UBound(ordonnees) - LBound(ordonnees))) Then
        ls = UBound(abscisses)
        li = LBound(abscisses)
        Count = ls - li
        ReDim xx(Count)
        ReDim yy(Count)
        For i = 0 To Count
            xx(i) = abscisses(i)
            yy(i) = ordonnees(i)
        Next i
    Else
        Exit Function
    End If
        
    If Count = 0 Then
        Interp_lin = yy(0)
        Exit Function
    End If
        
    If ((xx(0) < xx(Count)) And (x < xx(1))) Or ((xx(0) > xx(Count)) And (x > xx(1))) Then
        i = 0
    ElseIf ((xx(0) < xx(Count)) And (x > xx(Count - 1))) Or ((xx(0) > xx(Count)) And (x < xx(Count - 1))) Then
        i = Count - 1
    Else
        For i = 0 To Count - 1
            If (x > xx(i) And x <= xx(i + 1)) Or (x <= xx(i) And x > xx(i + 1)) Then
                Exit For
            End If
        Next i
    End If
    
    Interp_lin = (yy(i) * (xx(i + 1) - x) + yy(i + 1) * (x - xx(i))) / (xx(i + 1) - xx(i))
    
End Function
ok option securite des macros faut soit decendre la protection a moyen et autoriser les macros a chaque ouverture ou a bas fermer excel et reouvrir

apres si la ligne 30 est rempli

Interp_lin = (yy(i) * (xx(i + 1) - x) + yy(i + 1) * (x - xx(i))) / (xx(i + 1) - xx(i))

le xx(i+1) n existe pas et donc !valeur
La confiance dans les macro est déjà réglée sur le max..
Je n'y comprends vraiment rien, décidément.

La fonction fonctionne parfaitement, c'est juste ce problème à l'ouverture du workbook...
Tout le reste du workbook fonctionne bien également.
justement faut pas le max sinon les macros ne sont pas ouverte
faut ouvrir excell regler sur moyen ou bas fermer excel rester comme ca ne plus toucher ouvrir le fichier

je tente de comprende le calcul truc bizare
=Interp_lin('-Calcul-Geometrie-'!$B$6:B$30;'-Calcul-Geometrie-'!C$6:C$30;B39)
donc count =24
ligne pourquoi compare a la ligne 24 ???
If ((xx(0) < xx(Count)) And (x < xx(1))) Or ((xx(0) > xx(Count)) And (x > xx(1))) Then

grave erreur de nommer une variable count qui est un mot cle mais c est pas ton pb

Dernière modification par cricri ; 28/10/2019 à 00h55.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés