Excel VBA: feuille de calcule non mise à jour
aligatorbh
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
aligatorbh Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
aligatorbh Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Mon probleme n'est pas résolut par la commande calculate (F9) ou dans le code vba Range("A1").calculate...
Excel est un programme super mais je bute sur une de ces limites (ou la mienne :)).. je m'explique.
J'ai un classeur dans lequel j'ai des feuilles cachées de référence nommées A, B, C et D. Ces feuilles sont préremplies et +/- complexe en formulation et on chacune dans leurs sheets un code VBA et un modules associé.
Dans ma feuille principale je choisis 5 type feuilles selon les références . Lors de la selection, la feuille correspondante et copiée, renommée puis affichée dans le classeur.
Les feuilles créées peuvent etre changées si on modifie la selection.
La disposition des onglets des feuilles créées sont automatiquement arrangés selon l'ordre de la selection.
Je me suis aperçu que excel ne mettait plus à jour les formules des feuilles. Ceci au bout d'un certain nombre de copie de sheet suivi d'un changement de position d'onglet. Ce nombre dépends de la "lourdeur" du classeur.
Il faut que je rentre dans chaque cellule puis appuis sur entrer pour mettre a jour seulement la cellule correspondante.
Le test peut etre fait simplement avec la procédure ci-dessous :
Créez un classeur avec 4 feuilles nommées Sheet1 à Sheet4. Dans la feuille 2 en A1 créez une formule lisant la valeur dans la cellule A1 de la feuille 1 (ex. =Sheet1!A1). Entréez la valeur 1 dans la cellule A1 de la feuille 1.
Insérer le code vba ci-dessous dans la feuille 1.
Créez un buton dans la feuille 2 qui va démarrer le code Sub test().
Lorsque le pg est lancé, il copie la feuille 4 puis supprime la copie et change la position de l'onglet 3 en 2eme position. Le code controle que la formule de la feuille 2 correspond bien à la valeur en feuille 1. Si elle ne correspond pas le nombre de copie/supp effetué et afficher. Et on peut voir que la valeur de la feuille 2 n'est pas mise à jour! Plus le classeur sera chargé avec des feuilles plus ce nombre chute (je suis arrivé à 2..).
Désolé pour les nombreuse fautes d'orthographe et autre mais j'espère avoir une réponse rapide car sinon j'ai plus d'1 semaine de boulot qui partira à la poubelle.
Sub test() 'A mettre dans Sheet1
loopE = 0
For x = 1 To 255 'Le nombre de copie lors de l'ouverture du classeur est limité à 255 en théorie
Worksheets("Sheet4").Visible = 1
On Error GoTo errorGest1
Sheets("Sheet4").Copy After:=Sheets(4)
On Error GoTo 0
Worksheets("Sheet4").Visible = 0
Application.DisplayAlerts = False
Sheets("Sheet4 (2)").Delete
Application.DisplayAlerts = True
Sheets(3).Move Sheets(2)
If Range("A1").Value = 1 Then
oldB = Worksheets("Sheet2").Range("A1")
Range("A1") = 2
If oldB = Worksheets("Sheet2").Range("A1") Then errorP = 1 Else errorP = 0
Else
oldB = Worksheets("Sheet2").Range("A1")
Range("A1") = 1
If oldB = Worksheets("Sheet2").Range("A1") Then errorP = 1 Else errorP = 0
End If
If errorP = 1 Then
loopE = x
x = 255
End If
Next x
Worksheets("Sheet2").Select
If loopE <> 0 Then MsgBox loopE
Exit Sub
errorGest1:
Worksheets("Sheet4").Visible = 0
MsgBox "Error copy limit " & x
End Sub
Mon probleme n'est pas résolut par la commande calculate (F9) ou dans le code vba Range("A1").calculate...
Excel est un programme super mais je bute sur une de ces limites (ou la mienne :)).. je m'explique.
J'ai un classeur dans lequel j'ai des feuilles cachées de référence nommées A, B, C et D. Ces feuilles sont préremplies et +/- complexe en formulation et on chacune dans leurs sheets un code VBA et un modules associé.
Dans ma feuille principale je choisis 5 type feuilles selon les références . Lors de la selection, la feuille correspondante et copiée, renommée puis affichée dans le classeur.
Les feuilles créées peuvent etre changées si on modifie la selection.
La disposition des onglets des feuilles créées sont automatiquement arrangés selon l'ordre de la selection.
Je me suis aperçu que excel ne mettait plus à jour les formules des feuilles. Ceci au bout d'un certain nombre de copie de sheet suivi d'un changement de position d'onglet. Ce nombre dépends de la "lourdeur" du classeur.
Il faut que je rentre dans chaque cellule puis appuis sur entrer pour mettre a jour seulement la cellule correspondante.
Le test peut etre fait simplement avec la procédure ci-dessous :
Créez un classeur avec 4 feuilles nommées Sheet1 à Sheet4. Dans la feuille 2 en A1 créez une formule lisant la valeur dans la cellule A1 de la feuille 1 (ex. =Sheet1!A1). Entréez la valeur 1 dans la cellule A1 de la feuille 1.
Insérer le code vba ci-dessous dans la feuille 1.
Créez un buton dans la feuille 2 qui va démarrer le code Sub test().
Lorsque le pg est lancé, il copie la feuille 4 puis supprime la copie et change la position de l'onglet 3 en 2eme position. Le code controle que la formule de la feuille 2 correspond bien à la valeur en feuille 1. Si elle ne correspond pas le nombre de copie/supp effetué et afficher. Et on peut voir que la valeur de la feuille 2 n'est pas mise à jour! Plus le classeur sera chargé avec des feuilles plus ce nombre chute (je suis arrivé à 2..).
Désolé pour les nombreuse fautes d'orthographe et autre mais j'espère avoir une réponse rapide car sinon j'ai plus d'1 semaine de boulot qui partira à la poubelle.
Sub test() 'A mettre dans Sheet1
loopE = 0
For x = 1 To 255 'Le nombre de copie lors de l'ouverture du classeur est limité à 255 en théorie
Worksheets("Sheet4").Visible = 1
On Error GoTo errorGest1
Sheets("Sheet4").Copy After:=Sheets(4)
On Error GoTo 0
Worksheets("Sheet4").Visible = 0
Application.DisplayAlerts = False
Sheets("Sheet4 (2)").Delete
Application.DisplayAlerts = True
Sheets(3).Move Sheets(2)
If Range("A1").Value = 1 Then
oldB = Worksheets("Sheet2").Range("A1")
Range("A1") = 2
If oldB = Worksheets("Sheet2").Range("A1") Then errorP = 1 Else errorP = 0
Else
oldB = Worksheets("Sheet2").Range("A1")
Range("A1") = 1
If oldB = Worksheets("Sheet2").Range("A1") Then errorP = 1 Else errorP = 0
End If
If errorP = 1 Then
loopE = x
x = 255
End If
Next x
Worksheets("Sheet2").Select
If loopE <> 0 Then MsgBox loopE
Exit Sub
errorGest1:
Worksheets("Sheet4").Visible = 0
MsgBox "Error copy limit " & x
End Sub
A voir également:
- Excel VBA: feuille de calcule non mise à jour
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide