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 SubBonjour,
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 +1Merci 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 ...
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.