ERREUR SUR MACRO - je trouve pas

miguelangelo

XLDnaute Occasionnel
bonjour Forum,

voilà, j'espere que vous pourrez m'aider à resoudre le chmil bliq...
j'ai retourné dans tous les sens je vois pas.

Situation, j'ai 2 onglets. "calcul loyer" et "annuel".
l'un cumul les informations du mois, pour en fin de période que les dites informations soient transférées sur l'"annuel".

Plusieurs intervenants, donc les écritures transférées vers l'onglet annuel doivent etre marqué d'un "ok".

j'espere qu'on me suit...

Procédure :

la macro fait un filtre sur les "ok", coupe les lignes concernées et les copie dans l'onglet annuel

tout se fait correctement sauf que au final, je ne trouve aucune trace des factures qui ne sont pas marquées "ok", ni dans l'onglet "annuel" ni dans l'onglet "calcul loyer".

Merci de m'éclairer parce que là je suis dans l'obscurité totale :confused::confused::confused::confused::confused:



Sub transfert_part()

Sheets("calcul loyer").Select
Range("a2").Select

Application.Goto Reference:="tri_courant"
Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Selection.AutoFilter Field:=1, Criteria1:="ok"
If Range("A2").End(xlDown) = "" Then GoTo suivant
Rows("3:" & Range("A3").End(xlDown).Row).Select
reponse = MsgBox("Transfert partiel pour " & Range("m1") & " " & "€", vbYesNo, "transfert")
If reponse = vbNo Then
ActiveSheet.ShowAllData
Application.Goto Reference:="tri_courant"
Selection.Sort Key1:=Range("O3"), Order1:=xlAscending, Key2:=Range("E3") _
, Order2:=xlAscending, Key3:=Range("C3"), Order3:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("A3").Select
GoTo suivant
End If

Selection.Cut
Sheets("annuel").Select
Range("a3000").Select
ActiveSheet.Paste
Application.Run "TRI_annuel"
Sheets("calcul loyer").Select
ActiveSheet.ShowAllData
Application.Goto Reference:="tri_courant"
Selection.Sort Key1:=Range("O3"), Order1:=xlAscending, Key2:=Range("E3") _
, Order2:=xlAscending, Key3:=Range("C3"), Order3:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("A3").Select
End

suivant:
MsgBox ("Aucune facture n'est selectionnée")
Application.CutCopyMode = False
Range("a3").Select

End Sub
 
C

Compte Supprimé 979

Guest
Re : ERREUR SUR MACRO - je trouve pas

Salut MiguelAngelo ;)

Effectivement c'est un GROS BUG d'Excel

Lorsque tu supprimes toutes les lignes d'un filtre automatique,
la clé de filtrage est perdue et du coup les autres données également.

Pour éviter ce problème :
1) effectuer une simple copie des données
2) supprimer le filtre
3) supprimer chaque ligne contenant le filtre, de la dernière vers la première
Code:
  ' Supprimer les lignes OK
  DerLig = Range("A" & Rows.Count).End(xlUp).Row
  For Lig = DerLig To 3 Step -1
    If Range("XX" & Lig).Value = "ok" Then
      Rows(Lig).Delete
    End If
  Next Lig

A+
 

miguelangelo

XLDnaute Occasionnel
Re : ERREUR SUR MACRO - je trouve pas

salut forum, salut brunom45

Salut MiguelAngelo ;)


Code:
  ' Supprimer les lignes OK
  DerLig = Range("A" & Rows.Count).End(xlUp).Row
  For Lig = DerLig To 3 Step -1
    If Range("XX" & Lig).Value = "ok" Then
      Rows(Lig).Delete
    End If
  Next Lig

A+

avec un peu de retard mais voilà. est ce quelqu'un peu m'expliquer les lignes
Derlig et forlig et surtout If Range("XX" & Lig).Value = "ok" Then ???
XX correspondrait à quoi ???

Merci à vous
 
Dernière édition:

mutzik

XLDnaute Barbatruc
Re : ERREUR SUR MACRO - je trouve pas

bonjour,
* rows.count = nombre de lignes d'une feuille excel (dans la version utilisée)
* range("1" & derlig) selectionne donc la derniere cellule de la colonne A
* end(xlup) fait remonter le curseur (comme si tu faisais Ctrl + flèche vers le haut) et s'arrete donc à la première ligne non vide (soit la derniere ligne de tes données)
* .row de tout cela met le numéro de ligne dans la variable Derlig
* donc on initialise la boucle de cette derniere ligne jusqu'à la ligne 3 mais en remontant (d'ou le step -1). Ceci permet de s'affranchir d'avoir à recalculer les lignes si tu le fais dans le sens 'vers le bas' car, si tu supprimes la ligne 6 (par ex) la ligne 7 devient la ligne 6, la 8 devient la 7 etc... et cela devient abominable ...
 

mutzik

XLDnaute Barbatruc
Re : ERREUR SUR MACRO - je trouve pas

re,
il manquait :
* Lig est une variable qui va prendre la valeur (au début) de Derlig, puis de Derlig - 1 (puisqu'on fait step -1)
- donc Lig = 452 (si ta derniere donnée est en ligne 452) à la première boucle, puis on vérifie si en 'XX452' se trouve la valeur 'ok' auquel cas on efface cette ligne
- next Lig refait un tour de boucle mais mets la valeur 451 dans derlig (step -1) et on refait le test 'ok'
- et on refait cette boucle jusqu'à la ligne 3 incluse
* XX correspond à la colonne ou se trouve 'ok'
 

miguelangelo

XLDnaute Occasionnel
Re : ERREUR SUR MACRO - je trouve pas

Mon Dieu ca devient trop hard pour moi.

pouvez vous me completer ma macro svp ???

l'information "ok" se trouve en colonne A


Sub transfert_part()

Sheets("calcul loyer").Select
Range("a2").Select

Application.Goto Reference:="tri_courant"
Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Selection.AutoFilter Field:=1, Criteria1:="ok"
If Range("A2").End(xlDown) = "" Then GoTo suivant
Rows("3:" & Range("A3").End(xlDown).Row).Select
reponse = MsgBox("Transfert partiel pour " & Range("m1") & " " & "€", vbYesNo, "transfert")
If reponse = vbNo Then
ActiveSheet.ShowAllData
Application.Goto Reference:="tri_courant"
Selection.Sort Key1:=Range("O3"), Order1:=xlAscending, Key2:=Range("E3") _
, Order2:=xlAscending, Key3:=Range("C3"), Order3:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("A3").Select
GoTo suivant
End If

Selection.Copy
Sheets("annuel").Select
Range("a3000").Select
ActiveSheet.Paste
Application.Run "TRI_annuel"
Sheets("calcul loyer").Select
ActiveSheet.ShowAllData
ligne = Range("A" & Rows.Count).End(xlUp).Row
For Lig = ligne To 3 Step -1
If Range("a" & Lig).Value = "ok" Then
Rows(Lig).Delete
End If
Next Lig

Application.Goto Reference:="tri_courant"
Selection.Sort Key1:=Range("O3"), Order1:=xlAscending, Key2:=Range("E3") _
, Order2:=xlAscending, Key3:=Range("C3"), Order3:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("A3").Select
End

suivant:
MsgBox ("Aucune facture n'est selectionnée")
Application.CutCopyMode = False
Range("a3").Select

End Sub
 

rayan76

XLDnaute Nouveau
Re : ERREUR SUR MACRO - je trouve pas

Bonjour,

Je suis stagiaire dans une entreprise qui m’a demandé d’automatiser un graphique sur plusieurs feuilles, en faisant référence à un exemplaire d’un graphique déjà réalisé en interne, donc pour créer ma macro d’automatisation de ce graphique sur 6 feuilles suivantes dans un même classeur « DG » « GEM » « EMA » « SAFA » « GR » « ADD » avec des données différentes. J’ai copié le modèle de graphique qui s’appelle « graphiq » et je l’ai collé sur la feuille » DG » et j’ai changé les sources des données, en prenant les données du tableau de la feuille « DG »
Le code de mon fichier Excel c’est 280308
Base de travail Windows XP 2002

Le code de macro généré c’est :

Sub Macro1GRAPHIQUE()
'
'
Sheets("Graphiq").Select
ActiveChart.ChartArea.Copy
Sheets("DG").Select
Range("B60").Select
ActiveSheet.Paste
ActiveSheet.ChartObjects("Graphique 10").Activate
ActiveChart.PlotArea.Select
End Sub


Mon souhait c’est s’automatiser cette macro sur les autres feuilles de même classeurs »GEM » « EMA « « SAFA » « GR » « ADD » qui contiennent les mêmes format des tableaux avec les mêmes dimensions ,mais avec des données des chiffres différentes .
Je vous remercie par avance.

Rayan
 

Discussions similaires

Réponses
11
Affichages
486

Statistiques des forums

Discussions
312 480
Messages
2 088 755
Membres
103 945
dernier inscrit
Rémi