IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Création de feuille dans un autre classeur : erreur '1004'


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 132
    Points : 59
    Points
    59
    Par défaut Création de feuille dans un autre classeur : erreur '1004'
    Bonjour,

    J'ai un gros soucis, je suis en stage actuellement et je dois à partir d'une feuille excel, trier et exporter les switch et locaux vers un autre classeur.

    Mais lorsque je veux créer les feuilles (qui represente les locaux du classeur 1) dans le classeur 2 (une feuille par locaux) il me le fait nikel mais il m'affiche une erreur :
    erreur '1004' :
    erreur définie par l'aplication ou par l'objet
    A la fin de mon tableau j'ai deux switch qui n'ont pas de locaux swzas1 et swzas2 d'ou ma condition dans la fonction.

    Enfin voila, je ne vois pas du tout pourquoi il bug, je pense que ca vient de la fonction mais apres ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    Private Sub export_Click()
     
        Dim cl1 As Workbook, cl2 As Workbook
        Dim f1 As Worksheet
     
        Set cl1 = ActiveWorkbook
        Set f1 = cl1.Worksheets("Etat Switch")
     
        Dim Fichier As String, nomclasseur As String
     
        'ajoute un nouveau classeur
        Application.Workbooks.Add
     
        'nomme ton classeur
        nomclasseur = Format(Date, "DD-MM-YYYY") & "-" & "Etat_Switch"
     
        'donne le chemin et l'extension du fichier
        Fichier = "C:\User\...\Documents\Stagiaire_POUCET\Switch\" & nomclasseur & ".xls"
     
        'sauvegarde le nouveau fichier
        ActiveWorkbook.SaveAs Fichier
     
        Set cl2 = ActiveWorkbook
     
     
     
        'fais le tour du tableau pour trouver tout les switch de tout les locaux
        For i = 1 To 5000
     
            'si c'est un switch prend la première et tout le reste ce fait à partir de cette première ligne
            If f1.Cells(i, 3).Value Like "*swz*" Then
     
                SwitchName = f1.Cells(i, 3).Value
                LocalName = f1.Cells(i, 2).Value
                dbt_tab_switch = i
     
     
                'depuis le premier local trouver la ligne de fin du switch
                For j = dbt_tab_switch To dbt_tab_switch + 55
     
     
                    'si on arrive sur une ligne blanche mais que les ports du switch sont encore present apres la separation
                    If ((f1.Cells(j, 3) = "") And (f1.Cells(j + 3, 2) = LocalName) And (f1.Cells(j + 3, 4) = "FA")) Then
     
                        j = j + 2
     
                        'sinon si le nom est différent du switch ou qu'apres la separation c'est un autre switch le tableau est fini
                    ElseIf ((f1.Cells(j, 3) <> SwitchName) Or ((f1.Cells(j, 3) = "") And ((f1.Cells(j + 4, 2) <> SwitchName) Or (f1.Cells(j + 4, 4) <> "FA")))) Then
     
                            fin_tab_switch = j - 1
                            j = dbt_tab_switch + 55
     
                    End If
     
     
                Next j
     
     
                'pour donner à i la debut du prochain switch
                'si il y a une sépération (3 ligne entre chaque séparation i recoit i + les trois lignes
                If ((f1.Cells(fin_tab_switch + 1, 3) = "") And (f1.Cells(fin_tab_switch + 3, 3) <> "")) Then
     
                    i = fin_tab_switch + 3
     
                    'sinon si le tableau commence la ligne d'apres
                ElseIf (f1.Cells(fin_tab_switch + 1, 3) <> "") Then
     
                        i = fin_tab_switch + 1
     
                    'sinon c'est que le tableau de tout les switch est fini
                    Else: i = 5000
     
                End If
     
     
     
                'ICI POUR LA CREATION DES LOCAUX
     
                proc = create_locaux(cl2, LocalName, SwitchName)
     
     
     
            End If
     
     
        Next i
     
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    'CREATION DES LOCAUX
    Public Function create_locaux(cl2, LocalName, SwitchName)
     
     
        FeuilleExiste = False
     
        For Each objFeuille In cl2.Sheets
          If objFeuille.Name = LocalName Then
            FeuilleExiste = True
            Exit For
          End If
        Next
     
        'si le local n'existe pas on le crée sauf pour la colonne du switch chwas1
        If ((FeuilleExiste = False) And (SwitchName <> " swzas1") And (SwitchName <> " swzas2")) Then
     
            'création de la feuille
            cl2.Sheets.Add
     
            'renomme la feuille
            cl2.ActiveSheet.Name = LocalName
     
        MsgBox LocalName & SwitchName & " i= " & i
        End If
     
        For Each objFeuille In cl2.Sheets
          If objFeuille.Name Like "Feuil*" Then
     
            Application.DisplayAlerts = False
            objFeuille.Delete
            Application.DisplayAlerts = True
     
          End If
        Next
     
    End Function

    Merci de bien vouloir m'aider

    Cordialement

    Benjamin

  2. #2
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Ok c'est bon il fallait que je rajoute une condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    'CREATION DES LOCAUX
    Public Function create_locaux(cl2, LocalName, SwitchName)
    
    
        FeuilleExiste = False
        
        For Each objFeuille In cl2.Sheets
          If objFeuille.Name = LocalName Then
            FeuilleExiste = True
            Exit For
          End If
        Next
        
        
        'si le local n'existe pas on le crée sauf pour la colonne du switch chwas1 et chwas2
        If ((FeuilleExiste = False) And (SwitchName <> " swzas1") And (SwitchName <> " swzas2")) And (LocalName <> "") Then
        
            'création de la feuille
            cl2.Sheets.Add
    
            'renomme la feuille
            cl2.ActiveSheet.Name = LocalName
        
        End If
            
        For Each objFeuille In cl2.Sheets
          If objFeuille.Name Like "Feuil*" Then
    
            Application.DisplayAlerts = False
            objFeuille.Delete
            Application.DisplayAlerts = True
    
          End If
        Next
    
    End Function
    Voila

    Merci quand même lol (je craque)

  3. #3
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Une première remarque : comme ta fonction ne renvoie rien, tu devrais en faire une procédure sub.
    Dans cette procédure, tu devrais déclarer le type de chaque argument. Comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'CREATION DES LOCAUX
    Public sub create_locaux(byref cl2 as Excel.Workbook, byval LocalName as string, byval SwitchName as string)
    Ceci fait, voir les pb résiduels.

    Bonne journée,
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  4. #4
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Ok merci, j'ai changé, à quoi pense tu qu'en tu parle d'erreur residuel ??

    Et j'ai encore un autre probleme avec cette même erreur, maitenant que je créer les feuilles concernant les locaux, je voudrais y insérer les switch.

    Dans le tableau du classeur un les locaux ne sont pas specialement l'un apres l'autre, exemple un local peut etre mentionné au début, et je peux le retrouver a mi chemin.

    Donc je crée le local avec la proc create_local et j'y insere direct le switch mentionnée dans le tableau du classeur 1.

    Et l'erreur intervient quand je reviens sur un local deja créer et que je dois y insérer un nouveau switch.

    Voici la fonction create_switch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    '|||||||| CREATION SWITCH ||||||||
     
    Public Sub create_switch(ByRef cl2 As Excel.Workbook, ByVal LocalName As String, ByVal SwitchName As String, ByVal dbt_tab_switch As Integer, ByVal fin_tab_switch As Integer)
     
     
        For Each objFeuille In cl2.Sheets
          If objFeuille.Name = LocalName Then
     
                Dim f2 As Worksheet
     
                Set f2 = cl2.Sheets(LocalName)
     
                'calcul de la premiere ligne dispo pour inserer le switch
                For l = 3 To 103 Step 5
     
                    If (f2.Cells(l, 2) = "") Then
     
                        ligne1 = l
                        l = 103
     
                    End If
     
                Next l
     
                MsgBox LocalName & SwitchName & " ligne1= " & ligne1
     
     
                'fusion de la première ligne disponible du switch (pour son nom)
                f2.Range(Cells(ligne1, 2), Cells(ligne1, 27)).Select
                With Selection
                    .MergeCells = True
                    .HorizontalAlignment = xlCenter
                    .VerticalAlignment = xlCenter
                    .Value = SwitchName
                End With
     
          End If
        Next
     
     
    End Sub

    J'espere avoir ete assez clair et que l'on va pouvori m'aider, c'est le seul truc qui me reste a faire et apres j'ai fini ...

    Benjamin

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Un exemple afin de mieux me faire comprendre,

    Au debut j'ai le LocalName = SZ36I et le SwitchName = SZW600 donc je crée la feuille (dans le classeur 2) nommée SZ36I avec a la ligne 3 la valeur SZW600.
    Ensuite ligne d'apres (classeur 1), j'ai LocalName = SZ28U et le SwitchName = SZW234 donc je crée la feuille (dans le classeur 2) nommée SZ28U avec a la ligne 3 la valeur SZW234.
    Apres, j'ai encore le LocalName = SZ36I mais avec le SwitchName = SZW768, donc là, la ligne dispo est la 8 c'est ici que je devrais inserer le switch.
    Il prend bien en compte la ligne dispo 8 car il me l'affiche avec le msgbox mais arrive la fusion il me met l'erreur ...

Discussions similaires

  1. [XL-2007] Erreur pour copier plusieurs feuilles dans un autre classeur
    Par manu900 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 08/02/2012, 09h31
  2. [XL-2003] Copier une feuille dans un autre classeur
    Par mistermail dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/10/2009, 18h06
  3. [XL-2003] ERREUR 9 Archivage d'une feuille dans un autre classeur
    Par altra dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 18/08/2009, 11h15
  4. Réponses: 2
    Dernier message: 26/08/2008, 20h55
  5. Réponses: 2
    Dernier message: 15/02/2008, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo