Macro : ignorer erreur et s’exécuter correctement

Résolu/Fermé
noe2008 Messages postés 183 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 9 novembre 2023 - 13 févr. 2016 à 09:48
noe2008 Messages postés 183 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 9 novembre 2023 - 13 févr. 2016 à 12:54
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

A voir également:

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 13/02/2016 à 12:20
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
noe2008 Messages postés 183 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 9 novembre 2023 4
13 févr. 2016 à 12:54
Merci michel ça marche bien le problème est résolu.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
13 févr. 2016 à 12:08
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