probleme gestion d'absence d'onglet dans une macro

auverland

XLDnaute Occasionnel
Bonjour à tous,
J'ai un soucis avec ma macro, j'arrive pas à boucler sur une erreur d'onglet.
Si tous mes fichiers ont bien l'onglet "etude" il me fait bien mes copies par contre j'aimerai gerer l'absence de cette onglet en copiant les données d'une autre feuille si celui-ci est absent. je souhaiterai qu'il utilise la feuille "garderie"

Pouvez-vous m'aider à faire cette gestion d'erreur ?
Merci d'avance à tout les contributeur


Sub Import()
Dim objShell As Object, objFolder As Object
Dim Chemin As String, fichier As String
Dim Colonne As Integer
Dim cs As Workbook 'déclare la variable cs (Classeur Source)

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
'Si l'utilisateur annule sans choisir
If objFolder Is Nothing Then
'message
MsgBox "Abandon opérateur", vbCritical, "Annulation"
Else 'sinon
'Chemin = répertoire choisi
Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\"
'Choix du 1er fichier
fichier = Dir(Chemin & "*.xls*")
'Colonne = n° de colonne ou on va coller les données
'pour commencer colonne A, laisser à 0, pour commencer colonne B remplacer 0 par 1 etc...
Colonne = 3
'on boucle sur tous les fichiers excel du répertoire choisi
' Application.ScreenUpdating = False

Do While Len(fichier) > 0
Colonne = Colonne + 1
If fichier <> ThisWorkbook.Name Then
'attribue un nom dans le classeur, se référant à la plage à importer : B2:I18
ThisWorkbook.Names.Add "Plage", RefersTo:="='" & Chemin & "[" & fichier & "]Etude'!$B$2:$q$44"

With Sheets("recup_etude")
' "Importe les données" grâce au nom donné ci-dessus
.[B2:Q44] = "=Plage"
'recup donnés général
.[C3:c7].Copy 'Copie C3'.[C3].Copy 'Copie C3
End With
With Sheets("synthese")
.Cells(3, Colonne).PasteSpecial xlPasteValues 'Colle c3
End With
End If
fichier = Dir()
Loop
End If
'Application.ScreenUpdating = tree
End Sub
 

Paf

XLDnaute Barbatruc
Re : probleme gestion d'absence d'onglet dans une macro

Bonjour

peut-être en remplaçant dans le code:

Code:
With Sheets("recup_etude")
par
Code:
... début du code
Dim Flag As Boolean, i As Byte, MaFeuille As Worksheet
Flag = False
For i = 1 To Worksheets.Count
    If Worksheets(i).Name = "recup_etude" Then
        Flag = True
        Exit For
    End If
Next

If Flag = True Then
    Set MaFeuille = Sheets("recup_etude")
Else
    Set MaFeuille = Sheets("garderie")
End If
With MaFeuille
...suite du code

A+
 

Paf

XLDnaute Barbatruc
Re : probleme gestion d'absence d'onglet dans une macro

Re,

j'aurais dû mieux lire le code ! ce que j'ai proposé ne peut pas apporté de solution.

Pour résoudre le problème je verrais comme solution
-soit d'ouvrir chaque classeur puis de tester l'existence de la feuille étude (aménagement du code proposé ) mais ralentissement du traitement
_soit d'accéder aux fichiers fermés en passant par ADODB.Connection ( mais connais pas)

A+
 

auverland

XLDnaute Occasionnel
Re : probleme gestion d'absence d'onglet dans une macro

ta premiere solution me conviendrait certainement car je dois traiter de toute facons tous les fichiers.
Chaque fichier à soit un onglet "etude" ou un onglet "garderie"
Je galère vraiment pour adapter un code
merci si tu peux m'orienter

n'est^-il pas possible de rajouter une condition sur la ligne

If fichier <> ThisWorkbook.Name Then

du type If fichier <> ThisWorkbook.Name and (le fichier contient l'onglet"etude")Then
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : probleme gestion d'absence d'onglet dans une macro

re,

à tester (remplacer le code entre Application.ScreenUpdating = False et Application.ScreenUpdating = True)

Code:
' Application.ScreenUpdating = False

Do While Len(fichier) > 0
Colonne = Colonne + 1
If fichier <> ThisWorkbook.Name Then
     'attribue un nom dans le classeur, se référant à la plage à importer : B2:I18

       Workbooks.Open (Chemin & fichier)
       Dim Flag As Boolean, i As Byte, MaFeuille As Worksheet
       Flag = False
       with workbooks(fichier)
       For i = 1 To .Worksheets.Count
           If .Worksheets(i).Name = "Etude" Then
               Flag = True
               Exit For
           End If
       Next
       end with

       If Flag = True Then
             ThisWorkbook.Names.Add "Plage", RefersTo:="='"  & "[" & fichier & "]Etude'!$B$2:$q$44"
       Else
             ThisWorkbook.Names.Add "Plage", RefersTo:="='"  & "[" & fichier & "]garderie'!$B$2:$q$44"
       End If


With Sheets("recup_etude")
' "Importe les données" grâce au nom donné ci-dessus
.[B2:Q44] = "=Plage"
'recup donnés général
.[C3:c7].Copy 'Copie C3'.[C3].Copy 'Copie C3
End With
With Sheets("synthese")
.Cells(3, Colonne).PasteSpecial xlPasteValues 'Colle c3
End With
End If

    Workbooks(fichier).Close

fichier = Dir()
Loop
End If
'Application.ScreenUpdating = true

par contre ce que je ne comprend pas, c'est que la zone où sont copiées les données est la même pour tous les fichiers; les données du suivant écrasant celles du précédent.

A+
 

auverland

XLDnaute Occasionnel
Re : probleme gestion d'absence d'onglet dans une macro

Merci beaucoup Paf
Ca marche NIKEL
En faite si la macro copies les données au même emplacement c'est parceque j'importe les données d'une zone du fichier source puis à la suite toutes mes données collecté sont répartie dans mon classeur synthèse. J'ai des lignes qui me font des copies de différentes cellules avant de relancer sur le fichier suivant.
En tout cas merci beaucoup
 

Discussions similaires

Statistiques des forums

Discussions
312 083
Messages
2 085 183
Membres
102 808
dernier inscrit
guo