Fonctions VBA se desactivent
Bonjour,
J'ai code un petit userform qui permet en gros de faire un copier coller d'une plage de cellules de ma page "Tabelle1" jusqu'a ma page "Ergebnis" en gardant la mise en forme de ces cellules.
Je vous joins une partie de ce fichier (avec environ le dixieme de la base de donnees originale)
Certaines des colonnes de la base de donnees sont remplies a l'aide de fonctions que j'ai codees dans le modul1.
Voila mon probleme:
Si vous testez l'Userform, il va marcher (Bien que de nombreuses choses doivent etre encore optimisees..)
MAIS:
Dans les objets excels sur la feuille Tabelle1 vous pouvez voir:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
End Sub
Meme si j'ai ecrit ce code uniquement pour faire un test, vous voyez deja (normalement) que les fonctions ne se remettent pas a jour a chaque fois que vous selectionner une nouvelle cellule...
Sur mon ordinateur, meme appuyer sur F9 ne met pas a jour les fonctions.
Maintenant si vous modifier quoi que ce soit dans le code.
Par exemple remplacer le code ci dessus par:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
' => juste sauter une ligne, ce qui ne devrait avoir aucune influence sur le code
End Sub
Vous voyez maintenant que la fonction remarche (par magie)...
Si vous relancez maintenant mon userform, a l'appui sur le bouton final "OK", vous desactivez toutes les fonctions qui se trouve dans ma page "Tabelle1" et je ne comprends pas pourquoi...
Sur mon ordinateur cela se passe a la ligne:
Sheets("Ergebnis").Range("A1:M20").ClearContents
Tout ce que je tente de vous expliquer n'est vraiment pas clair. Si vous avez le courage de faire quelques tests sur l'userform, j'espere que vous comprendrez mon probleme.
Et si vous avez une solution, je vous remercie
Bonjour
Dans toutes tes fonctions rajoutes la ligne surlignée
Exemple
Function namme(cellule As Range) As String
Dim i As Integer
Application.Volatile
For i = 2 To 15
If cellule.Text = Sheets("tblLacke").Cells(i, 2).Text Then
namme = Sheets("tblLacke").Cells(i, 5).Value
End If
Next
End Function
Extrait de l'aide
Cette méthode marque comme volatile une fonction personnalisée. Une fonction volatile doit être recalculée chaque fois qu'un calcul est effectué dans une cellule quelconque de la feuille de calcul. Une fonction non volatile n'est recalculée qu'en cas de changement des variables d'entrée. Cette méthode est sans effet si elle ne se trouve pas à l'intérieur d'une fonction définie par l'utilisateur utilisée pour calculer une cellule de feuille de calcul.
Je testerai ça en revenant au bureau lundi mais merci.
Je clôturerai ce sujet une fois que la solution sera testée