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 i

J'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 Sub

Merci 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).Row

devrait ê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 Then

mettez comme ceci

If sh_total.Cells(i, 7) = 30 Then

3. 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 i

comme 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 i

Bonsoir 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

Rechercher des sujets similaires à "macro fonctionne pas lorsque fenetre reduite"