Archivage automatique de ligne Excel
Bonjour à tous,
On m'a récemment demandé de revoir et simplifié notre fichier de gestion de stock qui se fait encore sur excel (oui ne sommes pas très moderne). J'ai mis à jour le fichier mais pour vraiment le simplifié et surtout simplifié la comptabilité, j'aimerai que lorsqu'une référence devient non active, c'est a dire que lorsque le stock en E passe à 0, la ligne entière se transfère dans la feuille archive. De même pour les produits qui passerai en Essai et qui ne serai pas vide mais pour le tableau essai
Je sais que pour cela il faut utilisé le VBA, mais j'avoue ne pas du tout m'y connaitre. Je sais que des posts ont déjà été fais à ce sujet, j'ai essayer de les reprendre mais sans grand succès…
Je vous remercies d'avance pour votre aide.
Re bonjour,
Pour l'instant j'ai ce code que j'ai récupéré d'un post et que j'ai essayer de réadapter, je l'ai également lié à un bouton pour l'exécuter.
Mais je ne sais pas quelle condition rentrer pour le If, pour l'instant quand je l'exécute toutes les lignes s'archivent sans distinction, il faudrait que seulement les lignes avec la quantité vide (ou 0 si c'est plus simple?) s'archivent.
Je ne suis pas non plus sure que toutes les lignes soient nécessaire.
Merci d'avance pour
votre aide!
Dim J As Long 'déclare la variable J (incrément)
Dim K As Long 'déclare la variable K (incrément)
Dim L As Byte 'déclare la variable L (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim PL As Range 'déclare la variable PL (PLage)
Set I = Worksheets("Stock") 'définit l'onglet I
Set H = Worksheets("Archive") 'définit l'onglet H
Set PL = I.Range("A1") 'initialise la variable PL
TV = I.Range("A4").CurrentRegion 'définit le tableau des valeurs TV (il commence en A3 et la première valeur est à sa 4ème ligne)
NL = UBound(TV, 1) 'définit le nombre de lignes NL du tableau des valeurs TV
NC = UBound(TV, 2) 'définit le nombre de colonnes NC du tableau des valeurs TV
K = 1 'initialise la variable K
For J = 2 To NL 'boucle 1 : sur toutes les lignes J du tableau des valeurs TV (en partant de la 2ème)
If TV(J, 5) <> "" Then 'condition :
Set PL = IIf(PL.Cells.Count = 1, I.Rows(J + 2), Application.Union(PL, I.Rows(J + 2))) 'définit la variable PL
ReDim Preserve TL(1 To NC, 1 To K) 'redimensionne le tableau des lignes TL
For L = 1 To NC 'boucle 2 : sur toutes les colonnes du tableau des valeurs TV
TL(L, K) = TV(J, L) 'récupère dans la ligne L de TL, la valeur de la donnée en colonne L de TV (=transposition)
Next L 'prochaine colonne de la boucle 2
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
End If 'fin de la condition
Next J 'prochaine ligne de la boucle 1
If K > 1 Then 'condition : si K est égale à 1 (au moins une occurence "Effectué le" trouvée)
Set DEST = IIf(H.Range("A4") = "", H.Range("A4"), H.Range("A3").End(xlDown).Offset(1, 0)) 'définit la cellule de destination DEST
DEST.Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL) 'renvoie dans DEST redimensionnée le tableau TL transposé
End If 'fin de la condition
If PL.Cells.Count > 1 Then
PL.Delete 'efface la plage PL
End If
End SubBonjour François,
Merci pour votre aide! Le fichier marche très bien lorsqu'il y a des valeurs à 0 et des éléments en essais dans le fichier, mais si il manque en manque 1 des deux alors il y a le message erreur 1004 No cells were found. Peut on contourner ce problème? Peut être en ajoutant une condition?
Merci d'avance!
Bonjour
Au début de la macro sauvegarde mettre:
on error resume next
et en fin de macro
on error goto 0 (pour annuler la 1ere commande)
A+ François