Macro : ignorer erreur et s’exécuter correctement

Résolu
noe2008 Messages postés 191 Statut Membre -  
noe2008 Messages postés 191 Statut Membre -
Bonjour,
Je travaille sur une macro , qui importe de données d'un classeur externe composé de plusieurs feuille : sheet1, sheet2 ......
ma macro gère correctement un classeur externe composé de 12 feuilles c'est a dire de sheet1 jusqu'a sheet12
mais le problème c-est qu'l y a des classeurs qui sont composé de moins de 12 feuilles : 6 feuilles 7 feuilles .... alors la macro ne marche pas
je veux ajouter une condition dans la macro pour qu'elle gére correctement tous les classeurs
voila le code la macro :

Sub donnee()

Dim Fich As String, cd1, NM1, cd2, NM2, cd3, NM3, cd4, NM4, cd5, NM5, cd6, NM6, cd7, NM7, cd8, NM8, cd9, NM9, cd10, NM10, cd11, NM11, cd12, NM12

Fich = Application.GetOpenFilename
Workbooks.Open (Fich)

Sheets("Sheet1").Select
cd1 = ActiveSheet.Range("J14:J74")
NM1 = ActiveSheet.Range("I10")
Sheets("Sheet2").Select
cd2 = ActiveSheet.Range("J14:J74")
NM2 = ActiveSheet.Range("I10")
Sheets("Sheet3").Select
cd3 = ActiveSheet.Range("J14:J74")
NM3 = ActiveSheet.Range("I10")
Sheets("Sheet4").Select
cd4 = ActiveSheet.Range("J14:J74")
NM4 = ActiveSheet.Range("I10")
Sheets("Sheet5").Select
cd5 = ActiveSheet.Range("J14:J74")
NM5 = ActiveSheet.Range("I10")
Sheets("Sheet6").Select
cd6 = ActiveSheet.Range("J14:J74")
NM6 = ActiveSheet.Range("I10")
Sheets("Sheet7").Select
cd7 = ActiveSheet.Range("J14:J74")
NM7 = ActiveSheet.Range("I10")
Sheets("Sheet8").Select
cd8 = ActiveSheet.Range("J14:J74")
NM8 = ActiveSheet.Range("I10")
Sheets("Sheet9").Select
cd9 = ActiveSheet.Range("J14:J74")
NM9 = ActiveSheet.Range("I10")
Sheets("Sheet10").Select
cd10 = ActiveSheet.Range("J14:J74")
NM10 = ActiveSheet.Range("I10")
Sheets("Sheet11").Select
cd11 = ActiveSheet.Range("J14:J74")
NM11 = ActiveSheet.Range("I10")
Sheets("Sheet12").Select
cd12 = ActiveSheet.Range("J14:J74")
NM12 = ActiveSheet.Range("I10")

ActiveWorkbook.Close

Range("A14:A74") = cd1
Range("b14:b74") = NM1
Range("D14:D74") = cd2
Range("E14:E74") = NM2
Range("G14:G74") = cd3
Range("H14:H74") = NM3
Range("J14:J74") = cd4
Range("K14:K74") = NM4
Range("M14:M74") = cd5
Range("N14:N74") = NM5
Range("P14:P74") = cd6
Range("Q14:Q74") = NM6
Range("S14:S74") = cd7
Range("T14:T74") = NM7
Range("V14:V74") = cd8
Range("W14:W74") = NM8
Range("Y14:Y74") = cd9
Range("Z14:Z74") = NM9
Range("AB14:AB74") = cd10
Range("AC14:AC74") = NM10
Range("AE14:AE74") = cd11
Range("AF14:AF74") = NM11
Range("AH14:AH74") = cd12
Range("AI14:AI74") = NM12

End Sub

cordialement

2 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    Peut-^tre + simple avec nbre de feuilles variables

    Option Explicit
    '----------
    Sub ccc()
    Dim Fich As String
    Dim Nbre As Byte, Cptr As Byte, Cdx, NMx
    Dim Cptr2 As Byte

    Application.ScreenUpdating = False
    Fich = Application.GetOpenFilename
    Workbooks.Open (Fich)
    Nbre = ActiveWorkbook.Sheets.Count
    Cptr2 = 1
    For Cptr = 1 To Nbre
    With Sheets(Cptr)
    Cdx = .Range("J14:J74")
    NMx = .Range("I10")
    End With

    With ThisWorkbook.Sheets(1)
    .Range(.Cells(14, Cptr2), .Cells(74, Cptr2)) = Cdx
    .Range(.Cells(14, Cptr2 + 1), .Cells(74, Cptr2 + 1)) = NMx
    Cptr2 = Cptr2 + 3
    End With
    Next
    ActiveWorkbook.Close
    End Sub


     Michel
    2
    1. noe2008 Messages postés 191 Statut Membre 4
       
      Merci michel ça marche bien le problème est résolu.
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Comme ceci:

    Dim onglet As Integer
    Dim Fich As Variant
    Fich = Application.GetOpenFilename
    Workbooks.Open (Fich)
    onglet = ThisWorkbook.Worksheets.Count
    MsgBox onglet


    ensuite ajuster la macro suivant le nombre de feuilles avec des Select Case ou des If Then End If
    1