Excel ne répond pas - macro light et fichier allégé au maxi

Bonjour à tous,

Je débute dans la programmation VBA sous excel, et je ne comprends pas pourquoi ma macro entraîne le plantage d’excel.

Il n’y a aucune formule dans les cellules, je les ai supprimées et remplacées par des valeurs pour être sûr que ce ne soit pas ça qui fasse ramer excel.

Le but de la macro est de copier les cellules d’une plage qui répondent à une condition et de les coller dans une même colonne (pour permettre un vlookup facile ensuite).

Quelqu’un peut-il me dire pourquoi ça plante (ou rame) ? J’ai l’impression que mes boucles sont bien fermées, que tous les End If sont là…

Merci d'avance !

Voilà le code :

Private Sub CommandButton1_Click()

' Le but de la macro est de sélectionner les cellules de la plage B6:BG200 répondant aux conditions suivantes :

' - différent de " / "

' - différent de "FIN"

' et de les coller dans la colonne A à partir de la ligne 210

' Définition et dimensionnement des variables :

Dim COL As Integer, LIG As Integer, VAL As String, LIG2 As Integer, VAL2 As String

' Points de départ des calculs :

COL = 10 ' colonne 59 (BG)'ATTENTION VALEUR MODIFIEE POUR TEST --> 10 au lieu de 59

LIG = 6 ' ligne 6 (après les entêtes de colonnes)

VAL = Cells(LIG, COL).Value ' valeur de la cellule d'origine

LIG2 = 210 ' ligne 210 après le tableau de généalogie

VAL2 = Cells(LIG2, 1).Value ' valeur de la cellule de destination

Do Until COL = 1

' Si la valeur sur la ligne 202 est égale à 195,

' Alors passer à la colonne précédente,

' Sinon analyser la valeur des cellules de la ligne 6 à 200 et passer à la colonne suivante

' Passage des calculs en mode manuel

Application.Calculation = xlCalculationManual

If Cells(202, COL).Value = 195 Then

COL = COL - 1

Else:

Do Until LIG = 10 'ATTENTION VALEUR MODIFIEE POUR TEST --> 10 au lieu de 200

' Si la valeur de la cellule est différente de " / " ou "FIN",

' Alors ajouter la valeur de la cellule dans la liste des lots à traquer, et passer à la ligne suivante

' Sinon Passer à la ligne suivante

If VAL <> " / " Or VAL = "FIN" Then

' Si la valeur de la cellule de destination est nulle,

' Alors copier la valeur de la cellule d'origine dans la cellule de destination, et passer à la ligne suivante

' Sinon passer à la ligne2 suivante

If VAL2 = "EMPTY" Then

VAL2 = VAL

LIG = LIG + 1

Else: LIG2 = LIG2 + 1

LIG = LIG + 1

End If

Else: LIG = LIG + 1

COL = COL - 1

Loop

End If

Loop

' Passage des calculs en mode automatique

Application.Calculation = xlCalculationAutomatic

' Message de fin de tâche

MsgBox "Fini !!!"

End Sub

Bonjour,

VAL étant définie une fois pour toutes, la macro ne devait pas faire grand chose...

Je te propose donc du plus classique et qui devrait être plus sûr si ta description correspond bien à ton fichier (car j'ai quelques doutes sur plusieurs points... )

Private Sub CommandButton1_Click()
    Dim i%, j%, k%
    Application.ScreenUpdating = False
    With Me
        j = 209
        For k = 59 To 2 Step -1
            If .Cells(202, k) <> 195 Then
                For i = 6 To 200
                    If .Cells(i, k) <> " / " Or .Cells(i, k) <> "FIN" Then
                        j = j + 1: .Cells(j, 1) = .Cells(i, k)
                    End If
                Next i
            End If
        Next k
    End With
    MsgBox "Fini !!!"
End Sub

Cordialement.

Hello !

J'ai testé ton code...

Il ne donne pas les bons résultats.

Il liste le contenu de 4382 cellules alors qu'il ne devrait en lister que 867.

Je ne comprends pas ce que tu veux dire par "VAL étant définie une fois pour toutes".

J'ai defini VAL comme une valeur variable :

VAL = Cells(LIG, COL).Value

Elle varie donc à chaque fois que l'itération change la valeur des variables LIG et COL...

Je joins mon fichier si ça peut aider... Le but est donc que toutes les cellules de la plage A6:BG200 dont la valeur n'est ni "FIN" ni " / " soient listées dans la colonne A à partir de la ligne 210.

La condition sur la valeur 195 est sensée permettre de ne pas faire l'analyse des cellules si toute la colonne est faite de cellule don't la valeur est "FIN" ou " / ".

Merci pour votre aide !

11qr-tracker-5.xlsm (92.75 Ko)

Tu initialises VAL une fois !

La variable a donc la valeur de la cellule pointée lors de l'intialisation.

N'étant initialisée qu'une fois, sa valeur ne change plus...

Pour le reste, il faudrait peut-être que tu t'assures de la validité des valeurs de comparaison : " / " (slash encadré d'espaces) et "FIN" (en majuscules). Les cellules qui contiennent ces valeurs sont exclues. Toutes les autres sont récupérées.

Cordialement.


edit : J'ai écrit le code trop vite !

                    If .Cells(i, k) <> " / " And .Cells(i, k) <> "FIN" Then

Remplacer Or par And dans cette ligne.

Mais cela ne semble pas suffire à atteindre ton évaluation. Peut-être manque-t-il une condition... ?

Bonjour à tous !

Après d'autres essais, je me suis rendu compte d'une erreur stupide de ma part (MFerrand, j'avais noté "=" au lieu de "<>"...).

Du coup, je bloque sur un autre point. Le problem étant different, je cloture ce sujet et en édite un autre

Merci à tous pour votre aide !

Rechercher des sujets similaires à "repond pas macro light fichier allege maxi"