Macro

Résolu
louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,


J ai un problème sur une macro qui ne s'exécute pas svp. La macro doit archiver les lignes sur l onglet archives selon trois condditions , mais celle-ci ne le fait pas et je n arrive pas à trouver pourquoi.
https://www.cjoint.com/c/GAbp63CrFvP

Sub Archivage()
Application.ScreenUpdating = True
Dim Msg, Style, Title, Response, MyString 'Définition des variables pour le message d'information
Dim Cellule, DerniereLigne, Compteur 'Definition des varaible pour l'archivage des lignes
Msg = "Attention ce programme va archiver automatiquement les lignes soldées, Souhaitez-vous continuer?"    ' Définit le message.
Style = vbYesNo + vbInformation + vbDefaultButton2    ' Définit les boutons.
Title = "Archivage des lignes soldées"    ' Définit le titre.
Response = MsgBox(Msg, Style, Title, Help, Ctxt)
If Response = vbYes Then    ' L'utilisateur a choisi Oui.
    MyString = "Oui" ' Effectue le programme d'archivage
    Sheets("Suivi Sof").Select 'Selectionne l'onglet "Suivi Sof"
    Range("A3").Select 'Se positionne sur la cellule A3
    DerniereLigne = ActiveSheet.UsedRange.Row - 1 + _
                  ActiveSheet.UsedRange.Rows.Count 'Recherche la derniereligne de la zone
  MsgBox "Position dernière ligne : " & DerniereLigne
  For Compteur = DerniereLigne To 3 Step -1
   If Cells(Compteur, 8).Value = "" And _
     Cells(Compteur, 10).Value = "Soldé" And _
     Cells(Compteur, 11).Value = "Soldé" Then
     Sheets("Archives").Select 'Selectionne l'onglet "Archives"
     Rows("2:2").Select 'Selectionne la 2° ligne
     Selection.Insert Shift:=xlDown 'Insére une ligne
     Sheets("Suivi Sof").Select 'Selectionne l'onglet "Suivi Sof"
     Rows(Compteur).Select 'Selcetionne la ligne correpondant à la valeur compteur
     Selection.Copy 'Copie les valeurs de la ligne correspondant à la valeur compteur
     Sheets("Archives").Select 'Selectionne l'onglet "archives"
     Rows("2:2").Select 'Selectionne la 2° ligne qui est vide à ce stade
     Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False 'Colle les valeurs
     Sheets("Suivi Sof").Select 'Selectionne l'onglet "Suivi Sof"
        Application.CutCopyMode = False
     Selection.Delete Shift:=xlUp 'Efface la ligne archivée
  End If
  Next Compteur 'Ligne suivante, intruction liée à for
Else    ' L'utilisateur a choisi Non.
    MyString = "Non" ' Effectue une action.
    Exit Sub 'Sort du programme
End If
Range("A1").Select
End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.


Merci pour votre aide
A voir également:

6 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
Le code ne s'exécute pas, ou bien ne fait pas ce que tu souhaites?
0
louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
il s execute mais ne fait pas ce que je souhaite.
il s arrete au message box " position de la derniere ligne" plus rien apres.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
L'as-tu exécuté en pas à pas, pour comprendre ce qu'il fait?
0
louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
oui
et elle s arrete car pour la mcro c est fini.
ca doit etre soit les conditions ou les regles du compteur , enfin je pense..
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
en pas à pas, tu peux suivre le résultat de chaque condition, c'est bien cela que tu fais?
0
louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
oui enfin je pense car je suis debutante
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
bonjour Louisamiel, yg_be

Ton code parait bien compliqué !

si j'ai compris
tu veux supprimer les lignes répondant à tes 3 conditions dans "suivi sof"et les transférer dans "archives" ?

si oui
combien de lignes as tu d'utilisées dans "suivi sof"
combien de colonnes : A à.... ?
ou mieux
Mettre un extrait du classeur ( 50 lignes environ)sans données confidentielles en pièce jointe sur « mon-partage.fr »
et faire un clic droit-coller le raccourci dans votre message

Dans l’attente

 Michel
0
louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Michel

oui


Actuellement j en ai pas mal de lignes car je n ai pas pu faire fonctionner le code
les colonnes vont de A à Z

ci dessous le lien
https://mon-partage.fr/f/ol5yMe9I/
merci
Louisamiel
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Pas mal de lignes: c'est à dire ?
100, 1000,10000.... (dans suivi sof)

le nombre de lignes déterminera une méthode traitement ou une autre
 Michel
0
louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir Michel

Desolée pour la reponse tardive, dans suiv sof c est plus ou moins 1500 Lignes
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Juste une remarque (sauf erreur de ma part):

Y a un probleme entre les tests et les colonnes a tester
0
louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
oui effectivement je viens de me rendre compte que j ai pas mis les bonnes colonnes pour les conditions
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
re,

merci F89 pour la remarque

en attendant une dernière vérif
Option Explicit
'-------------------------------------------------------------------
Sub archiver_si()
Dim Msg As String, Style, Title As String, Response As Byte, help, ctxt
Dim Derlig As Integer, Nbre As Integer, Lig As Integer, Cptr As Integer, Transfer
Dim Ligvid As Integer

Application.ScreenUpdating = False
'préparation
Msg = "Attention ce programme va archiver automatiquement les lignes soldées, Souhaitez-vous continuer?" ' Définit le message.
Style = vbYesNo + vbInformation + vbDefaultButton2 ' Définit les boutons.
Title = "Archivage des lignes soldées" ' Définit le titre.
Response = MsgBox(Msg, Style, Title, help, ctxt)
If Response = vbNo Then Exit Sub

With Sheets("suivi sof")
'crée une colonne furtive permattant de tester les conditions
Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
.Range("AA3:AA" & Derlig).FormulaLocal = "=(ESTVIDE(H3))*(L3=""soldé"")*(M3=""soldé"")"
'Nbre lignes à transférer
Nbre = Application.CountIf(.Columns("AA"), 1)
'prise en compte ligne à tranf&rer
For Cptr = 1 To Nbre
Lig = .Columns("AA").Find(what:=1, after:=.Range("AA2"), LookIn:=xlValues).Row
Transfer = .Range(.Cells(Lig, "A"), .Cells(Lig, "Z"))
'report en archives
With Sheets("Archives")
Ligvid = .Columns("A").Find(what:="", after:=.Range("A2")).Row
With .Cells(Ligvid, "A").Resize(1, 26)
.Value = Transfer
.Borders.Weight = xlThin
End With
End With
'détruit la ligne sur "suivi sof"
.Rows(Lig).Delete
Next
'détruit la colonne de test
Columns("AA").Clear
End With
MsgBox "Archivage terminé"
End Sub



je repasse en fin d'apres midi
 Michel
0
louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
michel, j ai testé votre code en modifiant H3 par J3 car je me suis trompée de colonnes pour les conditions. mais l archivage ne fontionne pas ...
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

dans ta colonne J , TOUTES les lignes renvoie X, certaines ont été camouflées en écrivant rouge sur fond rouge : CHAPEAU !!!

comme toutes les lignes renvoie X, l'archivage ne peut pas se faire

la formule est à refaire et c'est ton problème.




0
Utilisateur anonyme
 
Ah, ben oui, ça ! Faut une bonne vue pour voir un texte rouge sur fond rouge !  ;)
T'as bien raison, michel : c'est super bien camouflé ! du texte vert sur fond vert
aussi, ça doit être pas mal !  :P Ou toute variante similaire...  :P
0
louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
NON toutes lignes renvoient pas au X , cest juste un remplissage
il y a bien certaines lignes qui remplissent les 3 conditions .

J accepete la critique sans pb car je suis pas experte d ou mon passage sur le site, mais on peut tres bien faire les remarques en etant " gentil"

enfin bref merci quand meme
0
Utilisateur anonyme > louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
Excuse-moi, louisamiel, c'était juste pour plaisanter, et pas méchamment !  ;)
Pour la réponse à ton problème, je laisse michel continuer ton suivi.
Je te souhaite une bonne année 2017, et meilleurs vœux !  :)
0
Utilisateur anonyme > louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
 
J'ai regardé la copie d'écran du message #18 de f894009.
En H2, la formule utilise ces 3 colonnes : 8, 10, 11 = H, J, K
Ne serait-ce pas plutôt : 10, 12, 13 = J, L, M ?

Si oui, à corriger ; cette correction étant peut-être à faire
pour toute la ligne 2 ? Et peut-être alors que la macro
marchera ? Si je me suis trompé, attention à bien tout
remettre comme c'était avant ! Le plus simple est de
faire l'essai sur une copie du fichier.
 
0
louisamiel Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   > Utilisateur anonyme
 
oui effectivement je me suis rendu compte que j ai pas mis les bonnes colonnes pour les conditions
du ma macro fonctionne avec un lenteur mais fonctionne
merci bien
0