Rapport de message :*
 

Re: Probleme réalisation macro avec enregistreur de macro ...

Titre du sujet : Re: Probleme réalisation macro avec enregistreur de macro ...
par Mth le 16/01/2013 02:08:45

Bonsoir Eric, bonsoir à tous,

Le code généré par l'enregistreur est très pratique mais un peu indigeste, je t'avoue que je n'ai pas tout décortiqué dans le détail.
D'une façon générale une fois le code de l'enregistreur généré, il convient de le nettoyer un peu.
D'entrée tu peux éliminer tous les scroll, tu peux aussi éliminer la plupart des Select qui ne servent à rien sauf à ralentir le code.

On peut bien sûr faire mieux mais je te propose un petit nettoyage de ce genre:

Option Explicit
Sub Action()
'Déclaration des Variables
Dim i As Long ' Variable pour la boucle fournie par Mth site: http://www.mdf-xlpages.com/
Dim vImport As Variant
Dim Feuil As String
 
Feuil = "Recap"

vImport = Workbooks("EssaiMagKSStestfaux chiffres.xls").Sheets("BDD02").Range("A1120:D1147").Value

For i = 1 To ThisWorkbook.Sheets.Count 'boucle fournie par Mth site: http://www.mdf-xlpages.com/
'Sheets.count renvoie le nombre d'onglets du classeur.
  If Sheets(i).Name <> "Recap" Then
    'Sheets(i).Name indique le nom de la feuille en cours
    'Si le nom de l'onglet est différent de "Recap" alors.. exécuter telle action
        With Sheets(i)
            .Range("D14:D29").FormulaR1C1 = _
              "=IF(OR(RC[-3]=""Sans Tva"",RC[-3]=""Tva à 19.6%"",RC[-3]=""Tva à 5.5%"",RC[-3]=""Tva à 7%"",RC[-3]=""Totaux""),""1""&RC[-3],"""")"
            .Range("A70:D97") = vImport
        End With
   End If
     
Next i

'Création de la feuille Recap
'teste si Recap existe déjà, si oui ne fait rien
If Not FeuilExiste(Feuil) Then
    'cf ici: http://www.mdf-xlpages.com/modules/smartfaq/faq.php?faqid=40
    'La fonction "FeuilExiste(Feuil) décrite sur le lien est dans un module standard
    Sheets.Add before:=Sheets(1)
    ActiveSheet.Name = "Recap"
End If
'Copie du tableau dans la feuille Recap
Sheets("Sheet 1").Range("A70:A97").Copy Sheets("Recap").Range("A4")

'Nomme l'intitulé des colonnes par le noms de chaque onglet
With Sheets("Recap")
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "Recap" Then
            .Range("IV3").End(xlToLeft).Offset(0, 1) = Sheets(i).Name
        End If
    Next i
    'ajout des formules
    .Range("B4:AF31").FormulaR1C1 = _
       "=VLOOKUP(RC1,INDIRECT(R3C&""!$a$70:$c$97""),3,FALSE)"
    .Range("A4:AF31") = .Range("A4:AF31").Value
     ' etc. ...
    With .Range("B33:AF33")
        .FormulaR1C1 = "=SUM(R[-29]C:R[-1]C)"
        .Font.Bold = True
        .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 "
    End With
       
End With

ActiveWindow.DisplayZeros = False
End Sub
 

Sans les infos de l'onglet BDD02 du second fichier, je n'ai rien testé, par ailleurs je n'ai pas intégré toutes les formules, tu complèteras sur ton fichier, le principe est le même.

Ce n'est pas parfait mais vois si cela peut t'aider malgré tout.

Bien à toi,

mth