Macro ne fonctionne pas lorsque la fenetre est réduite
Bonjour,
Pourriez-vous m'aider avec le code ci-dessous ?
La macro ne fonctionne pas lorsque la fenetre du fichier contenant le code n'est pas développée (ouverte sur windows en grand) (il ne fonctionne pas lorsque la fenetre d'excel est réduite), j'ai l'impression que j'ai pourtant bien déclarer mes variables et mes worksheets.
Je pense que le problème viendrait de ce morceaux
For i = 1 To Derligne
If Workbooks("compta.xlsm").Worksheets("total").Cells(i, 7) = 30 Then
m30 = m30 + Range("H" & i).Value
End If
Next iJ'ai isolé chaque variable sur un worksheet pour voir celle qui revient bizarrement, et il semblerait que ce soit celle-ci.
Le code complet :
Sub all()
Dim sh_perso As Worksheet
Dim sh_total As Worksheet
Dim m30 As Integer
Dim w30 As Integer
Dim Derligne As Double
Dim i As Double
Dim MyRnd As Double
MyRnd = Format(Rnd(1), "#0.00")
Derligne = sh_total.Range("A" & Rows.Count).End(xlUp).Row
Set sh_perso = Workbooks("depense.xlsx").Worksheets("perso")
Set sh_total = Workbooks("compta.xlsm").Worksheets("total")
'Rafraichissement des sources
With ThisWorkbook
On Error GoTo source_1
.Connections("maison").Refresh
source_1:
.Connections("voiture").Refresh
exit_source:
End With
'Somme des valeurs
For i = 1 To Derligne
If Workbooks("compta.xlsm").Worksheets("total").Cells(i, 7) = 30 Then
m30 = m30 + Range("H" & i).Value
End If
Next i
'Somme dénominateur
For i = 1 To Derligne
If Workbooks("compta.xlsm").Worksheets("total").Cells(i, 7) = 30 Then
w30 = w30 + 1
End If
Next i
'Calcul moyenne pondérée
If w30 = 0 Then
sh_total.Range("O2") = 0
ElseIf w30 <> 0 Then
sh_total.Range("O2") = m30 / w30
End If
'décision
Select Case sh_total.Range("O2").Value
Case Is > 1: sh_mois.Range("A1").End(xlDown).Offset(1).Value = "positif"
Case Is < -1: sh_mois.Range("A1").End(xlDown).Offset(1).Value = "negatif"
Case Else: sh_mois.Range("A1").End(xlDown).Offset(1).Value = vbNullString
End Select
'transposer les valeurs sur l'autre fichier excel
On Error GoTo decision_1mois
If sh_mois.Range("A1").End(xlDown) = sh_mois.Range("A1").End(xlDown).Offset(-1).Value And _
sh_mois.Range("B1").End(xlDown).Value <> sh_perso.Range("B1").End(xlDown).Value And _
sh_mois.Range("A1").End(xlDown).Value <> "" And _
sh_mois.Range("A1").End(xlDown).Value = sh_mois.Range("A1").End(xlDown).Offset(-2).Value And _
sh_mois.Range("B1").End(xlDown).Value > sh_perso.Range("B1").End(xlDown) + (1260 / 86400) And _
sh_mois.Range("B1").End(xlDown).Offset(-1).Value - sh_mois.Range("B1").End(xlDown).Offset(-2).Value < (300 / 86400) And _
sh_mois.Range("B1").End(xlDown).Value - sh_mois.Range("B1").End(xlDown).Offset(-1).Value < (300 / 86400) And _
w30 > 2 And _
m30 < 4 Then
sh_perso.Range("A1").End(xlDown).Offset(1).Value = sh_mois.Range("A1").End(xlDown).Value
sh_perso.Range("B1").End(xlDown).Offset(1).Value = sh_mois.Range("B1").End(xlDown).Value
ssh_perso.Range("C1").End(xlDown).Offset(1).Value = Round(((m30 / w30) * (32 + MyRnd)), 2)
End If
exit_condition:
End SubMerci beaucoup,
Cordialement,
Christophe
Bonjour
Il y a des choses bizarre dans certaines lignes
1. Cette ligne
Derligne = sh_total.Range("A" & Rows.Count).End(xlUp).Rowdevrait être après
Set sh_total = Workbooks("compta.xlsm").Worksheets("total")2. sur cette ligne et idem plus bas
If Workbooks("compta.xlsm").Worksheets("total").Cells(i, 7) = 30 Thenmettez comme ceci
If sh_total.Cells(i, 7) = 30 Then3. Ligne avant le END IF vous avez deux s à ---> shperso
4. les déclarations variable derlign et i doivent être en INTEGER et pas DOUBLE
vérifiez déjà ces points
Crdlt
Edit : peut-être regrouper ceci
For i = 1 To Derligne
If Workbooks("compta.xlsm").Worksheets("total").Cells(i, 7) = 30 Then
m30 = m30 + Range("H" & i).Value
End If
Next i
'Somme dénominateur
For i = 1 To Derligne
If Workbooks("compta.xlsm").Worksheets("total").Cells(i, 7) = 30 Then
w30 = w30 + 1
End If
Next icomme ceci :
For i = 1 To Derligne
If Workbooks("compta.xlsm").Worksheets("total").Cells(i, 7) = 30 Then
m30 = m30 + Range("H" & i).Value ''Somme des valeurs
w30 = w30 + 1 'somme denominateur
End If
Next iBonsoir Dan et merci pour votre retour,
J'ai bien fait les modifications que vous m'aviez suggérer et ca semble déjà mieux fonctionner :)
Toutefois j'ai un message d'erreur qui apparait de temps à autre :
"Erreur d'execution '6':
Dépassement de capacité"
Pensez-vous que je dois modifier la déclaration des variables ?
Merci beaucoup,
Cordialement,
Christophe
Bonjour,
Toutefois j'ai un message d'erreur qui apparait de temps à autre :
"Erreur d'execution '6':
Dépassement de capacité"
Pensez-vous que je dois modifier la déclaration des variables ?
Oui, mais le tout est de savoir sur quelle ligne la macro vous renvoie cette erreur.
Chose déjà facile à savoir sans code; votre dernière ligne se situe où sur vos feuilles ? Si vous avez plus de 30000 lignes, passez la définition de vos variables INTEGER en LONG
Bonjour Dan,
Merci pour votre retour. La macro renvoi l'erreur sur la ligne :
m30 = m30 + Range("H" & i).Value 'Je vous confirme aussi que le nombre de ligne de code est inférieur à 30000, dois-je quand meme changer toutes les variables en LONG ?
Merci beaucoup pour votre aide,
Cordialement,
Christophe
Bonjour
Merci pour votre retour. La macro renvoi l'erreur sur la ligne :
m30 = m30 + Range("H" & i).Value '
Faudrait savoir ce que vaut m30 et range("H" & i) lorsque l'erreur survient et aussi quelle est la valeur de i
dans la ligne que vous mentionnez vous êtes sur quelle feuille ?
Je vous confirme aussi que le nombre de ligne de code est inférieur à 30000, dois-je quand meme changer toutes les variables en LONG ?
Non vous pouvez laisser ce que je vous ai donné donc sur Integer