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 :

Problème lors du transfert d'une macro de Perso.xls vers classeur [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 32
    Par défaut Problème lors du transfert d'une macro de Perso.xls vers classeur
    Bonjour,

    Je débute en VBA et ai créé une macro dans Perso.xls qui fonctionne très bien. Or celle-ci est destinée à être utilisée sur d'autres ordinateurs.
    Je l'ai donc naïvement transféré par copier coller de Perso.xls dans Thisworkbook(en changeant les noms des procédures uniquement), pensant que cela n'occasionnerait aucun problème. Voici ma macro :

    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     Sub Delete()
     
     
    'Supprime les fichiers photos associés aux liens hypertextes, supprime la ligne et en fait une copie de la ligne dans Sorties"
    Confirmation = MsgBox("Confirmer la suppression irréversible de la ligne et de ses photos ?", vbYesNo + vbCritical + vbDefaultButton2)
        If Confirmation = vbYes Then
     
            Call Selectionner
            Call SupprimerPhoto
            Call SupprCellHyper
            Call CopieExt
     
        Else: Exit Sub
        End If
     
    Ligne = ActiveCell.Row
    Rows(Ligne).Delete
     
    End Sub
     
     
    Sub Selectionner()
    'permet de selectionner uniquement la plage contenant des données sur la ligne où la cellule est active'
    Range(Range("A" & ActiveCell.Row), Range("IV" & ActiveCell.Row).End(xlToLeft)).Select
    End Sub
     
     
    Sub SupprimerPhoto()
     
    'supprime les fichiers sources des liens hypertexte'
     
    'Dim Compteur As Integer
    'Compteur = Selection.Hyperlinks.Count (probablement inutile)
     
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    For Each h In Selection.Hyperlinks
                If fso.FileExists(h.Address) = True Then
                AdrHyperlien = h.Address
                Kill (AdrHyperlien)
                'Compteur = Compteur - 1 (probablement inutile)
                End If
    Next
     
     
    'passe les liens hypertexte en mode texte'
    Range(Range("A" & ActiveCell.Row), Range("IV" & ActiveCell.Row).End(xlToLeft)).Select
     
    Selection.Hyperlinks.Delete
     
     
    End Sub
     
     
     
    Sub SupprCellHyper()
     
    'supprime le contenu des cellules en fonction des caractères par lesquelles elles commencent pour effacer le texte des liens hypertexte"
        Dim cell As Range
     
    Set DataRange = Selection
     
        For Each cell In DataRange
            If Left$(cell.Value, 3) = "C:\" Then cell.ClearContents
        Next
        For Each cell In DataRange
            If Left$(cell.Value, 3) = "K:\" Then cell.ClearContents
        Next
        For Each cell In DataRange
            If Left$(cell.Value, 3) = "..\" Then cell.ClearContents
        Next
        For Each cell In DataRange
            If Left$(cell.Value, 9) = "\\serveur" Then cell.ClearContents
        Next
     
    End Sub
     
     
    Sub CopieExt()
     
    Dim Celdest As String
    Dim NomFeuille As String
    NomFeuille = ActiveSheet.Name
     
    'ouvrir classeur, insérer la date'
    Application.Workbooks.Open "K:\Sorties"
    Worksheets(NomFeuille).Activate
     
        If Range("A2").Value = "" Then
            Range("A2").Value = Date
            Else
            Workbooks("Sorties").Sheets(NomFeuille).Range("A1").End(xlDown).Offset(1, O).Value = Date
        End If
     
    'Copier ligne et l'insérer dans Sorties à droite de la date'
    Range("A1").End(xlDown).Offset(0, 1).Name = "Celdest"
     
    Windows("Sources").Activate
     
    Call Selectionner
     
    Selection.Copy Destination:=Workbooks("Sorties").Sheets(NomFeuille).Range("CelDest")
     
    Workbooks("Sorties").Save
     
    Workbooks("Sorties").Close
     
     
    End Sub
    Si j'exécute ce code, j'obtiens une erreur 400.

    Avec le débog pas à pas je détecte une erreur "objet non géré par l'application" au niveau de :
    Application.Workbooks.Open "K:\Sorties"

    J'imagine que le problème vient du fait que ma macro gère des données sur deux classeurs différents mais je ne sais pas comment faire pour effectivement affecter la macro au classeur ou à la feuille.

    Pouvez-vous svp m'aiguiller ?

    Merci par avance,

    Quentin

  2. #2
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonjour,

    Si Sorties est le fichier excel, preciser sorties.xls

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 32
    Par défaut
    Bonjour helas,

    Merci pour ton aide. J'ai bien remplacé les sorties en sorties.xls mais cela ne fonctionne malheureusement toujours pas .

    Précision : Il s'agit de l'erreur "1004" : Erreur définie par l'application ou par l'objet

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Thisworkbook ne veut rien dire du tou!

    si tu parle de la module Thisworkbook ta macro ne sera visible que dans Thisworkbook.

    il faut en dire un peut plus sur le code! les instruction comme activate par exemple ne fonctionne pas dans la méthode open par exemple, car par définition le classeur ne peut être activé lors de son ouverture!

    pour t'aider il faut que nous intégrions le contexte!

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 32
    Par défaut
    Très bien je comprends, il est parfois difficile de savoir tous les éléments pouvant vous être utile sans maîtriser les subtilités de VBA.

    Précisions sur le contexte :

    Dans ma macro, ThisWorkbook désigne le classeur 1 ("Sources.xls"). La macro est exécutée à partir de la feuille "NomFeuille" de ce classeur étant ouvert.

    Le bug apparait lorsque je souhaite ouvrir le classeur 2 ("Sorties.xls", fermé avant l'éxécution de la macro). Une feuille également intitulée "NomFeuille" s'y trouve. Je rappelle que ce bug n'existe pas si j'exécute la macro depuis Perso.XLS.

    Je vous joins un Screenshot si cela peut vous aider

    Nom : Indic Macro.png
Affichages : 302
Taille : 55,9 Ko

    En fait ma question pourrait être : Où placer ma macro pour qu'elle s'exécute comme dans Perso.Xls mais disponible depuis d'autres ordinateurs/utilisateurs ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    surprime ton code de ThisWorkbook , ouvres ton classeur perso, maintiens le click gauche sur Module2 de perso et fait le glisser sur vbaproject de source.xls!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Problème envoi de mail avec Lotus lors du lancement d'une Macro via une tache planifiée
    Par Banjalex59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/03/2015, 20h19
  2. Ajouter automatiquement une macro dans perso.xls
    Par s.n.a.f.u dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/09/2008, 00h56
  3. Problème lors du chargement d'une image gif
    Par pat-trix dans le forum Applets
    Réponses: 15
    Dernier message: 19/09/2006, 17h22
  4. problème lors de création d'une vue
    Par gapse dans le forum Oracle
    Réponses: 7
    Dernier message: 26/07/2006, 12h59
  5. [TForm] Problème lors du déplacement d'une fenêtre sans barre de titre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/10/2004, 17h10

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