Macro avec une mémoire

Bonjour,

Je ne sais pas si c'est possible, mais j'ai une macro qui copie toutes les lignes "non conforme" dans un tableau et j’aimerais qu'on puisse mettre a jour cette liste sans l'effacer et que les nouvelles lignes se mettent à la suite des anciennes.

Merci d'avance si besoin je peux joindre le fichier.

Pour le moment j'ai ce code là :

Option Explicit

Dim f, sh, ln, lgn

Sub NONCONFORMEgest()

    If MsgBox("Est-ce que la liste est vide ?", vbQuestion + vbYesNo, "Mise à jour de la liste ?") = vbYes Then

        Set f = Sheets("Recap Gestionnelle")
        For Each sh In Worksheets
            If sh.Range("I14") = "CONFORME / NON CONFORME" Then
                For ln = 14 To sh.Range("I" & Rows.Count).End(xlUp).Row
                     If sh.Range("I" & ln) = "NON CONFORME" Then
                         lgn = Application.Max(6, f.Range("F" & Rows.Count).End(xlUp)(2).Row)
                         sh.Range("D" & ln & ":K" & ln).Copy f.Range("A" & lgn)
                      End If
                Next ln
            End If
        Next sh
        MsgBox "Travail terminé !"

    Else

        If MsgBox("Veuillez vider la liste", vbCritical + vbOKOnly, "Important") = vbOK Then
        End If
        Application.Run ("cleangest")

    End If

End Sub

Bonjour,

Il te suffit de définir une variable qui, lorsque c'est nécessaire... recalcule la première ligne disponible ...

par exemple ... Dim dl as Integer

dl = Feuil1.Range("A65536").End(xlup).Row +1

Merci pour ta réponse,

Si je fais ça il va me remettre toutes les lignes qu'il y avait déjà à la suite des autres ? pas juste les nouvelles ?

comandototo a écrit :

Merci pour ta réponse,

Si je fais ça il va me remettre toutes les lignes qu'il y avait déjà à la suite des autres ? pas juste les nouvelles ?

Désolé ...mais c'est ce que j'ai compris que tu voulais ... puisque tu dis avoir sélectionné les lignes ...

Que signifie pour toi ... la mémoire ...???

Désoler j'ai du mal à expliquer,

Par exemple, je lance la macro il me fait le tableau avec 100 lignes "non conforme". Ensuite pour X raisons, je dois mettre d'autres critères "non conforme", et à ce moment, j'aimerais que quand je relance la macro (ou une autre), elle ne prenne en compte que les nouvelles lignes "non conforme" et les ajoutes à la suite des anciennes.

Je ne sais pas si c'est plus clair

Re,

Bel effort d'explication ... mais bon, je ne sens pas trop ...

Si tu le permets pour la "mémoire", une petite explication ...

Deux grands cas possibles :

1. Tout se fait pendant l'éxécution de ton processus global (une ou plusieurs macros...)

Dans ce cas, il suffit d'avoir des variables ... de les déclarer Public ... et le tour est joué

2. Les choses se font en plusieurs étapes distinctes ...

Dans ce cas, tu as efectivement besoin de stocker les variables dont tu vas avoir besoin ... cette "mémoire" peut être stockée dans une feuille (cachée ou pas) ...

Est-ce-que cette explication est assez claire ...???

Merci d'essayer de comprendre

Très clair comme explication, dans mon cas ça serait plus le petit 2,

Pour en remettre une couche (dsl) :

- à t=0 je lance la macro qui va faire un tableau avec toutes les lignes "non conforme" des 30 feuilles du fichier

- à t=1 je vais dan la feuille X et je change une ligne "conforme" en "non conforme"

- à t=2 je (re)lance une macro qui va mettre à jour le tableau, en ajoutant la ligne que j'ai changer en t=1 à la suite du tableau créer en t=0

En faite, ce que je voudrais c'est une macro qui "regarde" le tableau créé à t=0, pour le comparer à toutes les feuilles et enfin rajoute (les lignes devenu "non conforme") et enlève (les lignes devenu "conforme").

J'essaie de faire de mon mieux

Si c'est pas possible, c'est pas très grave.

Re,

Autant te le dire tout de suite ... avec Excel ... tout est possible ...

J'ai l'impression que tu as besoin de te structurer une feuille dédiée dans laquelle tu organises clairement:

1. t =0 .... je stocke toutes les données dont je vais avoir besoin plus tard

t =1 ... je stocke toutes les données dont je vais avoir besoin plus tard

t =2 ... je stocke toutes les données dont je vais avoir besoin plus tard

2. ma macro retourne dans cette feuille dédiée ... "sa mémoire" ... pour faire ce qu'elle a à faire ...en utilisant les données

En conclusion, tu vois bien que si tu as une vision super claire de ce que ta macro devra faire ... cela précise les données que tu dois stocker dans l'onglet dédié ...

Merci,

Je vais essayer ce que tu dis, le problème c'est que contrairement aux étapes t=0 et t=2, l'étape t=1 est toujours différentes (pas la même feuille, ligne).

Le fichier est une check-list qu'on utilise au quotidien, les changements ne peuvent pas être connu à l'avance.

Autre solution,

Avec la même macro, je créer 2 tableaux (un avant changement, un après changement) et j'ajoute la différences dans le premier.

Par contre, j'ai aucune idée de comment faire pour comparer les lignes de deux tableaux, extraire la différence, et l'ajouter dans le premier tableau. En sachant que le même critère n'est pas forcement à la même ligne dans les deux tableaux.

Rechercher des sujets similaires à "macro memoire"