Macro Excel

Bonjour,

je reviens avec un petit souci, vous pouvez m'expliquer un peu ce qui fait cette formule.

Selection.AutoFilter Field:=35, Criteria1:="=*PROD*", Operator:=xlOr, _

Criteria2:="=*INTL*"

merci d'avance

a+

Bonjour,

Il s'agit d'une instruction de macro qui effectue un filtre automatique dans la colonne 35 et ce, sur les critères PROD et INTL.

C'est en fait le filtre personnalisé que tu trouves en utilisant le filtre automatique du menu/donnée/filtre

A bientôt

Dan

merci bcp Nad_dan pour ta reponse mais en effet j'ai un macro devant moi et depuis hier jessaye de savoir les manipulation qui fasse mais jarrive pas

vous pouvez m'aider a le comprendre si tu as le temps biensure??

a+

Re,

Bien entendu. Il n'y pas de pb.

A te lire

Dan

merciiiiiiiiiiiiiii beaucoup

et voilà le code du macro

Sub Macro_DAILY_Incidents()

'

' Macro_DAILY_Incidents Macro

' Macro enregistrée le 15/02/2006 par dzxvxn

' Touche de raccourci du clavier: Ctrl+a

'

Range("A7:A100").Select

Selection.ClearContents

Range("A6").Select

'

' modifications du nom des feuilles du fichier en entrée

'

Sheets("company-details").Select

Sheets("company-details").Name = "by company-details"

Range("A6").Select

Sheets("by company-details").Select

Sheets("by company-details").Move Before:=Sheets(1)

' Sheets("group assigned-status").Select

' Sheets("group assigned-status").Name = "by group assigned-status"

Sheets("by company-details").Select

' création d'une feuille et copie des ligne 1 à 5 de la feuille by company-details dans Feuil1

Sheets("by company-details").Select

Sheets.Add

Sheets("by company-details").Select

Rows("1:5").Select

Selection.Copy

Sheets("Feuil1").Select

Range("A1").Select

ActiveSheet.Paste

Rows("5:5").Select

Sheets("Feuil1").Select

Sheets("Feuil1").Name = "group assigned-status"

Range("A1").Select

Rows("3:3").Select

Selection.Delete Shift:=xlUp

' Sheets("by company-details").Select

Sheets("group assigned-status").Select

Sheets("group assigned-status").Move After:=Sheets(2)

Sheets("by company-details").Select

Range("A6").Select

' Suppression des lignes 1 à 4 et 2 des colonnes citées ci dessous

'

Rows("1:4").Select

Selection.Delete Shift:=xlUp

Rows("2:2").Select

Selection.Delete Shift:=xlUp

Range("A2").Select

'***********************************************************************

' Selection et suppression des Incidents PROD & INTL dans contact Location

'Rows("1:1").Select

' Selection.Copy

' Sheets("group assigned-status").Select

' Rows("4:4").Select

' ActiveSheet.Paste

' Sheets("by company-details").Select

Selection.AutoFilter Field:=35, Criteria1:="=*PROD*", Operator:=xlOr, _

Criteria2:="=*INTL*"

Cells.Select

Application.CutCopyMode = False

Selection.Delete Shift:=xlUp

Rows("1:1").Select

Sheets("group assigned-status").Select

Rows("4:4").Select

Selection.Copy

Sheets("by company-details").Select

Rows("1:1").Select

Selection.Insert Shift:=xlDown

Range("A1").Select

Application.CutCopyMode = False

Selection.AutoFilter

Range("AI1").Select

Selection.AutoFilter Field:=35, Criteria1:="=*Rolls*", Operator:=xlAnd

Cells.Select

Range("AE1").Activate

Selection.Delete Shift:=xlUp

Sheets("group assigned-status").Select

Rows("4:4").Select

Selection.Copy

Sheets("by company-details").Select

Rows("1:1").Select

Range("AE1").Activate

Selection.Insert Shift:=xlDown

Range("A1").Select

Sheets("group assigned-status").Select

Rows("4:4").Select

Application.CutCopyMode = False

Selection.ClearContents

Range("A1").Select

Sheets("by company-details").Select

'****************************************************************************

' Copie du contenu des feuilles by company-details et by group assigned-status du fichier en entrée

' dans les feuilles by company-details et by group assigned-status du fichier en sortie

'

Sheets(Array("by company-details", "group assigned-status")).Select

Sheets("by company-details").Activate

Cells.Select

Selection.Copy

Windows("tdbJCD_DWRagOpen_aaaammjj.eds.xlt").Activate

Cells.Select

ActiveSheet.Paste

Range("A1").Select

'**************************************************************************************

Cells.Select

ActiveSheet.Paste

Range("A2").Select

ActiveWindow.ScrollWorkbookTabs Position:=xlFirst

Sheets("by group assigned-SLA status").Select

Range("C2").Select

Sheets("by company-details").Select

Range("A1").Select

' Actualisation des tableaux dynamiques croisés

ActiveWindow.ScrollWorkbookTabs Position:=xlFirst

Sheets("by group assigned-SLA status").Select

Application.CutCopyMode = False

ActiveWorkbook.RefreshAll

Range("D2").Select

'*****************************************************************************************

' Sauvegarde du fichier

Dim dateactuelle As Date

Dim mois As Integer

Dim varmois As String

Dim recupdate, nomfic As String

On Error GoTo gerErrSauv

annee = Year(Date)

strfilepath = "\\FRBMSBUR041\tdb$\Jcd\Client\Daily_Report\"

dateactuelle = Date

recupdate = Year(dateactuelle) & Month(dateactuelle) & Day(dateactuelle)

' si la valeur jour est sur un caractère

If Len(Day(dateactuelle)) = 1 Then

recupdate = Left(recupdate, Len(recupdate) - 1) + "0" + Right(recupdate, 1)

End If

'si la valeur mois est sur un caractère

If Len(Month(dateactuelle)) = 1 Then

recupdate = Left(recupdate, Len(recupdate) - 3) + "0" + Right(recupdate, 3)

End If

'nom du fichier

nomfic = "tdbJCD_DWRagOpen " & recupdate & ".eds.xls"

ChDir strfilepath

ActiveWorkbook.SaveAs Filename:=strfilepath & nomfic _

, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _

ReadOnlyRecommended:=False, CreateBackup:=False

ActiveWorkbook.Close

ActiveWorkbook.Close

Exit Sub

gerErrSauv:

MsgBox "erreur dans la sauvegarde du fichier " & Chr(10) & Chr(13) & Err.Number & " " & Err.Description

End Sub

Re,

Laisse moi du temps là car cette macro peut être simplifiée. Il y a trop d'instructions qui ne serve à rien

Avant ceci --> ' création d'une feuille et copie des ligne 1 à 5 de la feuille by company-details dans Feuil1

Mets ce code :

 Sub Macro_DAILY_Incidents()
 '
 ' Macro_DAILY_Incidents Macro
 ' Macro enregistrée le 15/02/2006 par dzxvxn
 ' Touche de raccourci du clavier: Ctrl+a
 '
 Range("A7:A100").ClearContents 'on supprime les données des cellules A7 et A100
 Sheets("company-details").Name = "by company-details" 'on renomme la feuille "company-details"
 Sheets("by company-details").Move Before:=Sheets(1) 'on déplace la feuille "by company details en premier

Après ajoute --> ' création d'une feuille et copie des ligne 1 à 5 de la feuille by company-details dans Feuil1

 Sheets.Add.Name = "group assigned-status" 'on ajoute une feuille nommée group assigned Status
 Sheets("by company-details").Select 'on sélectionne la feuille company...
 Rows("1:5").Copy Destination:=Sheets(1).Range("A1") 'on copie les lignes de la feuille company vers la première feuille du classeur qui est group assigned-status

Je continue cela un peu plus tard dans la journée.

Si tu pouvais mettre ton fichier ce serait bien.

A+

Dan

merci Dan mais je peux pas mettre le fichier

a+

Re,

Dans la série d'instructions entre les deux premières lignes d'astérisque, peux tu me dire sur quellle feuille tu es et ce que tu veux faire.

Je vois que tu filtres et puis que tu copies de la feuille "group assigned" vers la feuille "by company".

Là je ne comprends plus rien à ce que tu veux faire pusiqu'avant tu fais le contraire en copiant les lignes 1 à 5 de la feuille "by company vers la feuille "group assigned

Difficile de t'aider là sans savoir ce que tu dois effectuer dans cette appli.

Tu peux expliquer ?

Merci

Dan

moi aussi ca ce que je veux car je suis en formation et le formateur m'a donne une mode operationnel qui contient des macros et il m'a dit dessayer avec les codes des macros pour savoir ce qui fait les macros

re,

Peut-être n'as-tu besoin que des explications de chaque instruction alors ?

Une chose que je peux te dire c'est que ce code a été effectué avec l'enregistreur automatique d'Excel que tu trouves dans menu/outils/macro/nouvelle macro.

en utilisant cet outil, tu peux créer une macro facielement mais les codes doivent être simplifiés pour gagner en rapidité.

A te lire

Dan

9testtcd2.zip (15.62 Ko)

oui je sais comment creer un nouveau macro, mais j'ai besoi maintenant de savoir c qu'il a fait apres le lancement de la macro pour ca j'ai essaye avec les codes pour un peu decouvrir ses manipulations

Re,

voici une explication des mots que tu trouves dans ta macro. La plupart y sont. vois aussi l'aide excel dans VBA qui te donne des explications bien meilleures encore.

Range : equivaut à une cellule ou ue plage de cellule

Select : instruction quand tu sélectionnes une cellule ou plusieurs cellules

Sheets : pour nommer une feuille (sheets('by company)

Add : instruction pour ajouter

Copy : copier une sélection, une feuille

Activesheet : la feuille active – donc celle que tu vois de ton classeur

Paste : coller ce que tu as copié précédemment

Name : instruction pour nommer une plage, une feuille (activesheet.name = "tat") ; on donne le nom tat à la feuille active

Selection.Delete Shift:=xlUp : on supprime la sélection et o fait remonter les cellules vers la haut de la feuille

Cells : équivaut à toutes les cellules de la feuille

Application.CutCopyMode = False : supprime l'action de copier – coller

Clearcontents : supprimer le contenu des cellules (pas les formules )

ActiveWorkbook.RefreshAll : actualiser les données des TCD

On error goto : vois l'aide excel à ce sujet, ce sera plus facile

Close : fermer un classeur (activeworkbook.close -> fermer le classeur actif)

Msgbox : boite à message

Chdir : donne le répertoire

Dim : utilisé pour déclarer les variables

A bientôt

Dan

Salut à tous

Sub Macro_DAILY_Incidents()
Range("A7:A100").Select
Selection.ClearContents
'Sur la feuille en cours effacer les cellules A7:A100
Range("A6").Select
'sert à rien
Sheets("company-details").Select
Sheets("company-details").Name = "by company-details"
'renommer "company-details" en "by company-details"

Range("A6").Select
'sert à rien
Sheets("by company-details").Select
Sheets("by company-details").Move Before:=Sheets(1)
'déplacer la feuille renommée en 1re position
Sheets("by company-details").Select

Sheets("by company-details").Select
'pfff que de select inutiles
Sheets.Add
'créer une feuille en 1re place dans le classeur
Sheets("by company-details").Select
Rows("1:5").Select
Selection.Copy
Sheets("Feuil1").Select
Range("A1").Select
ActiveSheet.Paste
'y coller les lignes 1 à 5 de la feuille "by company-details"
'à partir de la ligne 1
Rows("5:5").Select
'sert à rien
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "group assigned-status"
'renommer la nouvelle feuille "group assigned-status"
Range("A1").Select
'sert à rien
Rows("3:3").Select
Selection.Delete Shift:=xlUp
'supprimer la ligne 3 de "group assigned-status"

Sheets("group assigned-status").Select
Sheets("group assigned-status").Move After:=Sheets(2)
'mettre la feuille "group assigned-status" en 2me position
Sheets("by company-details").Select
'sélectionner la feuille "by company-details"
Range("A6").Select
'sert à rien

' Suppression des lignes 1 à 4 et 2 des colonnes citées ci dessous
'
Rows("1:4").Select
Selection.Delete Shift:=xlUp
'Supprimer les lignes 1 à 4 de "by company-details"
Rows("2:2").Select
Selection.Delete Shift:=xlUp
'supprimer la ligne 2 (ex n°6)
Range("A2").Select
'sert à rien

Selection.AutoFilter Field:=35, Criteria1:="=*PROD*", Operator:=xlOr, _
Criteria2:="=*INTL*"
'filtrer "by company-details" avec comme critère :
'la cellule AI de la ligne contient soit "PROD" soit "INTL"
Cells.Select
'sélectionner les cellules filtrées
Application.CutCopyMode = False
'sert à rien
Selection.Delete Shift:=xlUp
'supprimer la sélection
Rows("1:1").Select
'sert à rien
Sheets("group assigned-status").Select
Rows("4:4").Select
Selection.Copy
'copier la ligne 4 de "group assigned-status" (ex-ligne 5)
Sheets("by company-details").Select
Rows("1:1").Select
Selection.Insert Shift:=xlDown
'l'inserrer en ligne 1 de "by company-details"
Range("A1").Select
'sert à rien
Application.CutCopyMode = False
'sert à rien
Selection.AutoFilter
'supprimer l'auto-filtre précédent

Range("AI1").Select
Selection.AutoFilter Field:=35, Criteria1:="=*Rolls*"
Cells.Select
Range("AE1").Activate
Selection.Delete Shift:=xlUp
'supprimer les lignes dont AI contient "Rolls"
Sheets("group assigned-status").Select
Rows("4:4").Select
Selection.Copy
Sheets("by company-details").Select
Rows("1:1").Select
Range("AE1").Activate
'sert à rien
Selection.Insert Shift:=xlDown
'remettre les titres qu'on vient encore de supprimer
Range("A1").Select
'sert à rien
Sheets("group assigned-status").Select
Rows("4:4").Select
Application.CutCopyMode = False
'sert à rien
Selection.ClearContents
'effacer la ligne 4 de "group assigned-status"
Range("A1").Select
'sert à rien
Sheets("by company-details").Select
'sert à rien
'****************************************************************************

Sheets(Array("by company-details", "group assigned-status")).Select
'sert à rien
Sheets("by company-details").Activate
Cells.Select
Selection.Copy
Windows("tdbJCD_DWRagOpen_aaaammjj.eds.xlt").Activate
Cells.Select
ActiveSheet.Paste
'copier le contenu de "by company-details" dans la feuille active du modèle ?!?
Range("A1").Select
'sert à rien
'**************************************************************************************
Cells.Select
ActiveSheet.Paste
'on vient de le faire ! On a affaire à un bégue (^_^)
Range("A2").Select
'sert à rien
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
'rend visible le 1er onglet du classeur modèle

Sheets("by group assigned-SLA status").Select
Range("C2").Select
' on active C2 de "by group assigned-SLA status"
Sheets("by company-details").Select
Range("A1").Select
'sert à rien
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
'idem au-dessus : donc le premier sert à rien
Sheets("by group assigned-SLA status").Select
Application.CutCopyMode = False
'sert à rien
ActiveWorkbook.RefreshAll
'actualisation des TCD et liaisons externes
Range("D2").Select
'sert à rien
'*****************************************************************************************
' Sauvegarde du fichier
Dim dateactuelle As Date
Dim mois As Integer
Dim varmois As String
Dim recupdate, nomfic As String
'déclaration (au mauvais endroit)
On Error GoTo gerErrSauv
'si Excel détecte une erreur il va à l'adresse gerErrSauv
annee = Year(Date)
'variable = année système
strfilepath = "\\FRBMSBUR041\tdb$\Jcd\Client\Daily_Report\"
'chemin de sauvegarde ?

dateactuelle = Date
'variable = date système
recupdate = Year(dateactuelle) & Month(dateactuelle) & Day(dateactuelle)
'chaine de texte non maitrisée : année+mois+jour
'11 janvier 2007 => 2007111
'1 novembre 2007 => 2007111
' si la valeur jour est sur un caractère
If Len(Day(dateactuelle)) = 1 Then
recupdate = Left(recupdate, Len(recupdate) - 1) + "0" + Right(recupdate, 1)
End If
'si la valeur mois est sur un caractère
If Len(Month(dateactuelle)) = 1 Then
recupdate = Left(recupdate, Len(recupdate) - 3) + "0" + Right(recupdate, 3)
End If
'remise en forme tardive (^_^). Meilleur :
'recupdate = Format(dateactuelle, "yyyy") & Format(dateactuelle, "mm") & Format(dateactuelle, "dd")

nomfic = "tdbJCD_DWRagOpen " & recupdate & ".eds.xls"
'création du nom
ChDir strfilepath
'sert à rien
ActiveWorkbook.SaveAs Filename:=strfilepath & nomfic, FileFormat:=xlNormal
'Sauvegarde du fichier
'dans le dossier : strfilepath
'sous le nom : nomfic
ActiveWorkbook.Close
ActiveWorkbook.Close
'fermer les 2 classeurs
Exit Sub
'sortir avant la gestion des erreurs

gerErrSauv:
'adresse de gestion des erreurs Excel
MsgBox "erreur dans la sauvegarde du fichier " & Chr(10) & Chr(13) & Err.Number & " " & Err.Description
'message d'erreur
'MsgBox Err.Number & " " & Err.Description, vbCritical + vbOKOnly, "ERREUR DANS LA SAUVEGARDE DU FICHIER"
End Sub

Commentaire corrosif

Macro faite à l(aide de l'enregistreur macro et, si elle a fait l'objet de complêments, n'a pas été optimisée

Quelques principes pour ce genre de macro :

on sépare les actions :

  • Déclarations : toutes, et en tête de macro (même si on fusionne plusieurs macros)
  • copier/coller : ok (plus ou moins)
  • mise en forme feuille collée
  • mise en forme feuille copiée
  • sauvegarde sous un autre nom
  • fermeure
  • Gestion de toutes les erreurs Excel

Dans ton code, on navigue d'une feuille à l'autre, on effectue tout par select, on fait 10 fois la même opération inutile, etc....

Pour optimiser ta macro, il faudrait savoir ce que tu veux faire exactement : des instructions qui semblent "parasites" ne le sont peut-être pas

Ensuite structurer ta macro : pour maintenir un code, surtout lorsque sa rédaction est loin dans le temps, le fait d'être structuré et commenté facilite la tâche de l'intervenant (même si le modificateur est le créateur)

Enfin, proscrire les SELECT : sont peu utiles,t génèrent une perte de temps abominable et font clignoter les pages écran

Pour la suppression des lignes : on les fait dans l'ordre inverses du numéros : plus facile de lire qu'on supprime la 6, puis la 3:4, que de comprendre supprimer 3:4, puis 4

dans ton code, tu supprimes inserres 2 ou 3 fois ton titre, en même temps que toutes les cellules filtrées ?!?

Au lieu de supprimer Cells, supprime directement les lignes de 2 à dernière utilisée de la feuille : usedRange.(specielcells(xllastcell).row

A+

[Re....

p'tite idée de ce que pourrait devenir la macro

Sub Macro_DAILY_Incidents_1()
On Error GoTo Err_Macro_DAILY_Incidents_1
'Déclaration ==========================================================
Dim F_S As Worksheet
Dim F_D As Worksheet
Dim Err_Sect As Integer
Dim Str_Titre As String

'MEI ==================================================================
Application.ScreenUpdating = False
'blocage rafraîchissement écran pour accélérer le traitement
Range("A7:A100").ClearContents 'feuille active : nom ?
'Sur la feuille en cours effacer les cellules A7:A100
'Source ---------------------------------------------------------------
Sheets("company-details").Name = "by company-details"
'changement de nom
Set F_S = Sheets("by company-details")
'Mise en variable feuille source
F_S.Move Before:=Sheets(1)
'déplacer la feuille renommée en 1re position
'Destination ----------------------------------------------------------
Sheets.Add.Name = "group assigned-status"
'créer une feuille en 1re place dans le classeur
Set F_D = Sheets("group assigned-status")
'l'assigner en variable

'Copie ================================================================
Err_Sect = 1                                                '+-+-+-+
With F_D
    F_S.Rows("1:5").Copy .Range("A1")
    .Rows("3:3").Delete
    'copier lignes 1/2/4/5 source sur 1/2/3/4 destination
    .Rows(4).ClearContents
    'effacer la ligne 4
    .Move After:=Sheets(2)
    'mettre la feuille "group assigned-status" en 2me position
End With
With F_S
    'Mise en titre de la ligne 5
    .Range("1:4, 6:6").Delete
    'Supprimer les lignes 1 à 4 at 6

    .Rows(1).CurrentRegion.AutoFilter Field:=35, _
       Criteria1:="=*PROD*", Operator:=xlOr, Criteria2:="=*INTL*"
    'filtrer "by company-details" avec comme critère :
    'la cellule AI de la ligne contient soit "PROD" soit "INTL"
    .Range(Rows(2), Rows(UsedRange.SpecialCells(xlCellTypeLastCell).Row)).Delete
    'supprimer la sélection
    .AutoFilter
    'supprimer l'auto-filtre précédent

    .Rows(1).CurrentRegion.AutoFilter Field:=35, Criteria1:="=*Rolls*"
    .Range(Rows(2), Rows(UsedRange.SpecialCells(xlCellTypeLastCell).Row)).Delete
    'supprimer la sélection
    .AutoFilter
    'supprimer l'auto-filtre précédent
End With
'****************************************************************************
Err_Sect = 2                                                        '+-+-+-+
Sheets(Array("by company-details", "group assigned-status")).Copy _
     Before:=Workbooks("tdbJCD_DWRagOpen_aaaammjj.eds.xlt").Sheets(1)
'copier le contenu de "by company-details" dans la feuille active du modèle ?!?
'****************************************************************************
'****************************************************************************
'**************** en l'état des infos, peux pas faire mieux ********************
'****************************************************************************
'****************************************************************************
Err_Sect = 3                                                            '+-+-+-+
ActiveWorkbook.RefreshAll
'actualisation des TCD et liaisons externes
'*****************************************************************************************
' Sauvegarde du fichier
Err_Sect = 4                                                            '+-+-+-+

ActiveWorkbook.SaveAs _
            Filename:="\\FRBMSBUR041\tdb$\Jcd\Client\Daily_Report\tdbJCD_DWRagOpen " & _
            Format(Date, "yyyy") & Format(Date, "mm") & Format(Date, "dd") & ".eds.xls", _
        FileFormat:=xlNormal
'Sauvegarde du fichier

ActiveWorkbook.Close
ActiveWorkbook.Close
'fermer les 2 classeurs

'sortie obligatoire =====================================================
Sort_Macro_DAILY_Incidents_1:
    Application.ScreenUpdating = True
    Exit Sub

'Gestion des erreurs ====================================================
Err_Macro_DAILY_Incidents_1:
Select Case Err_Sect
    Case 0
        Str_Titre = "ERREUR DÉCLARATION ou MEI"
    Case 1
        Str_Titre = "ERREUR COPIE DANS FEUILLE"
    Case 2
        Str_Titre = "ERREUR COPIE DANS TABLEAU MODÈLE"
    Case 3
        Str_Titre = "ERREUR RAFRAÎCHISSEMENT TCD"
    Case 4
        Str_Titre = "ERREUR SAUVEGARDE DU FICHIER"
End Select

MsgBox Err.Number & " " & Err.Description, vbCritical + vbOKOnly, Str_Titre
Resume Sort_Macro_DAILY_Incidents_1
End Sub

Mais pas assez d'infos pour valider le code

A+

Rechercher des sujets similaires à "macro"