Erreur d'exécution 13

Résolu/Fermé
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 - 23 déc. 2010 à 11:37
Le Pingou Messages postés 12186 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 13 novembre 2024 - 27 déc. 2010 à 18:06
Bonjour à tous,

Je début une 1ere macro comme ci-dessous :
        Dim Nom_Chemin As String
        Dim Nom_Chem_Créé As String
        Dim Classeur_Origine As String
        Dim Classeur_Créé As String
        Dim Nom_Fichier As String
        Dim Classeur_Courant As String
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Classeur_Courant = ActiveWindow.Caption 
        Nom_Chemin = ActiveWorkbook.Path
        Classeur_Origine = ActiveWorkbook.Name
        Nom_Fichier = [Nom_Bdx]


Et un peu plus j'appelle 2iem macro par
        Application.Run "'XYZ.xls'!XXL_csv"


La 2iem macro début comme suit :
        Dim Nom_Chemin As String
        Dim Nom_Fichier As String
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Nom_Chemin = ActiveWorkbook.Path
        Nom_Fichier = [Nom_Bdx]

Et sur cette dernière ligne j'ai l'erreur suivante :

Erreur d'exécution 13 : Incompatibilité de type

Je fais exactement la même chose dans les deux macros et ça marche sur la 1ere et pas sur la 2iem.
Quelqu'un peut-il m'aider car je ne comprends pas.
D'avance merci.
Cordialement
Mistral
A voir également:

12 réponses

Le Pingou Messages postés 12186 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 13 novembre 2024 1 449
23 déc. 2010 à 17:22
Bonjour,
Avec les 2 procédures complètes se serait préférable !
0
Le Pingou Messages postés 12186 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 13 novembre 2024 1 449
Modifié par Le Pingou le 23/12/2010 à 22:24
Bonsoir,
Il me semble que :
Et un peu plus j'appelle 2iem macro par
Application.Run "'XYZ.xls'!XXL_csv"

n'est pas correct, mais sans les 2 procédures je ne peux pas être plus précis.
Salutations.
Le Pingou
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
24 déc. 2010 à 07:47
Bonjour le Pingou,

Tout d'abord merci pour tes réponses. Les deux macros sont ci-dessous
La première.

Sub Sauvegardebordereau_xls()

' Déclaration des variables.
        Dim Nom_Chemin As String
        Dim Nom_Chem_Créé As String
        Dim Classeur_Origine As String
        Dim Classeur_Créé As String
        Dim Nom_Fichier As String
        Dim Classeur_Courant As String
        
        Application.ScreenUpdating = False                  ' Bloque le rafraichissement de l'écran.
        Application.EnableEvents = False                    ' Arrête la scrutation.

' Récupération des valeurs dans les variables.
        Classeur_Courant = ActiveWindow.Caption             ' Récupération du nom du classeur.
        Nom_Chemin = ActiveWorkbook.Path                    ' Récupération du chemin.
        Classeur_Origine = ActiveWorkbook.Name              ' Récupération du nom du classeur d'origine.
        Nom_Fichier = [Nom_Bdx]                             ' Récupération du nom du fichier.

' Teste si le bordereau a été rempli.
    If Sheets("Bordereau").Range("A28").Value = "" Then     ' A28 1ere cellule utilisée non vide.
        MsgBox ("Le bordereau n'a pas été saisi !" & vbCrLf & " " & vbCrLf & "Il n'y aura donc pas de sauvegarde.") _
        , vbCritical, "Fédération Photographique de France"
        Exit Sub
    End If
' ******************************************
' *                                        *
' *    Sauvegarde du Bdx au format XLS.    *
' *                                        *
' ******************************************

        Sheets("Bordereau").Visible = True                  ' Affichage de la feuille Bordereau.
        Sheets("Menu").Select                               ' Sélection de la feuille Menu.
        ActiveWindow.SelectedSheets.Visible = False         ' Masquage de la feuille Menu
        ActiveSheet.Unprotect ("xxx")                 ' Enleve la protection de la feuille.

        Cells.Select                                        ' Sélectionne toute la feuille bordereau.
        Selection.Copy                                      ' Copie toute la feuille bordereau
        Workbooks.Add                                       ' Création d'un nouveau classeur.
        Cells.Select                                        ' Sélectionne tout la feuille.
        
'Collage sépcial des valeur.
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

'Collage spécial du format.
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    
        Range("B1").Select                                  ' Positionne la cellule active en B1.
        Application.CutCopyMode = False                     ' Désactive la copie.
        Application.DisplayAlerts = False                   ' Bloque le message d'alerte.
        ActiveWorkbook.SaveAs (Nom_Chemin & "\" & Nom_Fichier & " " & Format(Date, "yyyy") & ".xls")    ' Sauvegarde du fichier créé.
        Application.DisplayAlerts = Ture                    ' Remet le message d'alerte.
        Classeur_Créé = ActiveWorkbook.Name                 ' Récupere le nom du classeur créé.
       
' Copie le 1er logo
        Windows(Classeur_Origine).Activate
        ActiveSheet.Shapes("Picture 56").Select
        Selection.Copy
        Windows(Classeur_Créé).Activate
        ActiveSheet.Paste

' Copie le 2iem logo
        Windows(Classeur_Origine).Activate
        ActiveSheet.Shapes("Picture 55").Select
        Selection.Copy
        Windows(Classeur_Créé).Activate
        ActiveSheet.Paste
    
' Supprime les feuilles 2&3.
        Sheets(Array("Feuil2", "Feuil3")).Select
        Application.DisplayAlerts = False                   ' Bloque le message d'alerte.
        ActiveWindow.SelectedSheets.Delete
        Application.DisplayAlerts = Ture                    ' Remet le message d'alerte.
        Range("B1").Select
        

' Enregistrement et fermeture du classeur créé.
        ActiveWorkbook.Save
 
        Application.Run "'Bdx&Etiquettes_EC.xls'!SauvegardeBdx_csv"
   
        ActiveWorkbook.Close
        
        ActiveSheet.Protect ("xxx")                   ' Remet la protection de la feuille.
        Sheets("Menu").Visible = True                       ' Affichage de la feuille Menu.
        Sheets("Bordereau").Select                          ' Masquage de la feuille Bordereau
        ActiveWindow.SelectedSheets.Visible = False
' *********************

        Application.EnableEvents = True                     ' Remise en service de la scrutation.
        Application.ScreenUpdating = False                  ' Bloque le rafraichissement de l'écran.
        
        
MsgBox ("Votre bordereau a été sauvegardé dans le même répetoire d'origine que ce classeur." & vbCrLf & " " & vbCrLf & _
"Le nom du classeur est : N°Club_Bordereau_Concours_Discipline_Année." & vbCrLf & " " & vbCrLf & _
"Exemple : 1353_Bordereau_Régional_N&B_2010" & vbCrLf & " " & vbCrLf & "C'EST CE CLASSEUR QUE VOUS DEVEZ ENVOYER PAR MAIL."), _
vbInformation, "xxx"
  
End Sub


Et maintenant la seconde.

Sub SauvegardeBdx_csv()
       
        Dim Nom_Chemin As String
        Dim Nom_Fichier As String
       
        Application.ScreenUpdating = False
        Application.EnableEvents = False

        Nom_Chemin = ActiveWorkbook.Path
        Nom_Fichier = [Nom_Bdx]

' Afficher toutes les colonnes.
    Cells.Select
    Range("B1").Activate
    Selection.EntireColumn.Hidden = False
    
' Effacer les logos.
    ActiveSheet.Shapes("Picture 56").Select
    Selection.Delete
    ActiveSheet.Shapes("Picture 55").Select
    Selection.Delete
    
' Effacer les lignes.
    Rows("1:27").Select
    Selection.Delete Shift:=xlUp
    
' Effacer le texte.
    'ActiveCell.SpecialCells(xlLastCell).Select
    Rows("201:205").Select
    Selection.Delete Shift:=xlUp
    'Range("A1").select
    
' Effacer les colonnes.
    Columns("A:A").Select
    Range("A1").Activate
    Selection.Delete Shift:=xlToLeft
    
    Columns("E:E").Select
    Range("E1").Activate
    Selection.Delete Shift:=xlToLeft
    
    Columns("F:G").Select
    Range("F1").Activate
    Selection.Delete Shift:=xlToLeft
    
    Range("I:R").Select
    Range("I1").Activate
    Selection.Delete Shift:=xlToLeft
    
' Effacer toutes les bordures.
    Cells.Select
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
    Range("A1").Select
    
    Application.DisplayAlerts = False                   ' Bloque le message d'alerte.
    ActiveWorkbook.SaveAs (Nom_Chemin & "\" & Nom_Fichier & " " & Format(Date, "yyyy") & ".csv")    ' Sauvegarde du fichier créé.
    Application.DisplayAlerts = True                    ' Remet le message d'alerte.

End Sub


Je suis parvenu à faire ce que je voulais en integrant la seconde dans la première à l'endroit ou je faisait appel à la seconde. Ce n'est peut être pas la façon la plus élégante mais ça marche. Ce que je ne comprends pas c'est que je fais la même chose dans les deux et que ça marche sur l'une et pas sur l'autre. Je déclare mes variables et je recupere les valeures et là je plante!!!
En tout cas merci pour ton aide.
Cordialement
Mistral
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
24 déc. 2010 à 08:26
Bonjour,
A première vue.. [Nom_Bdx] est une plage nommée (cellule).
Vu qu'il n'y a plus les 2 macros distingues, je pense que cela provenait fu fait que ce n'était plus le bon classeur qui était actif, ça aurais été plus simple de mettre la cellule, soit..
WorkBooks("Nom.xls").sheets("NomFeuille").Range("A1")

A+
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
24 déc. 2010 à 08:38
Re,

Effectivement [Nom_Bdx] est une cellule nommée.
C'est seulement à titre d'essais que j'ai intégré la 2iem dans la 1ere. Pour voir si ça marché.
Mais j'aimerais que les deux reste séparées car je vais avoir plusieurs sauvegarde "CSV" à faire. Je prefere appeler plusieurs fois une même macro que de faire un copier/coller. C'est plus propre et moins lourd.
Donc avec les deux macros que je t'ai envoyé j'ai toujours mon erreur13
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12186 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 13 novembre 2024 1 449
Modifié par Le Pingou le 24/12/2010 à 14:21
Bonjour,
Merci pour l'information.
Pouvez-vous préciser à quel endroit de la première procédure vous avez inséré l'appel de la deuxième procédure?
Et aussi quel est la valeur de la cellule nommée [Nom_Bdx] ?
Joyeux Noël.
Salutations.
Le Pingou
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
24 déc. 2010 à 14:41
Avec plaisir!

J'appelle la macro à cet endroit :

' Enregistrement et fermeture du classeur créé.
        ActiveWorkbook.Save
 
        Application.Run "'Bdx&Etiquettes_EC.xls'!SauvegardeBdx_csv"
   
        ActiveWorkbook.Close

La valeur de la cellule [Nom_Bdx] est de la forme:

123456_Abc_def_Ghi_2010

Merci pour votre aide et joyeux Noël à vous et à toux ceux qui vous sont chers.
Cordialement
Mistral
0
Le Pingou Messages postés 12186 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 13 novembre 2024 1 449
Modifié par Le Pingou le 24/12/2010 à 17:10
Bonjour,
Ma dernière demande, je l'avais oublié et je pense que le problème y est lié : le nom [Nom_Bdx] fait référence à quelle cellule (exemple: =Bordereau!$A$23) ?
Merci.
Salutations.
Le Pingou
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
24 déc. 2010 à 17:44
Nom_Bdx est le nom d'une cellule de la feuille Menu qui se trouve dans le même classeur.
Le contenu de cette cellule est une fonction "concatener" de plusieurs infos qui se trouve sur la même feuille.
Dans la premiere macro j'utilise cette cellule pour sauvegarder mon Bordereau au format XLS et ça fonctionne parfaitement bien.
Bon Noël
Mistral
0
Le Pingou Messages postés 12186 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 13 novembre 2024 1 449
25 déc. 2010 à 01:13
Bonsoir,
Information en coup de vent.
J'ai trouvé ou est le problème, la solution pour dimanche, Noël oblige.
Salutations.
Le Pingou
0
Le Pingou Messages postés 12186 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 13 novembre 2024 1 449
25 déc. 2010 à 23:57
Bonjour,
Je vous propose se qui suit :
Déclarer la variable [Nom_Fichier] au niveau du module comme public :
Public Nom_Fichier as String
Vous supprimez donc la déclaration [Dim Nom_Fichier....] dans les procédures [Sub Sauvegardebordereau_xls()] et [Sub SauvegardeBdx_csv()].

Dans la procédure [Sauvegardebordereau_xls()] vous remplacez la ligne de code :
Application.Run "'Bdx&Etiquettes_EC.xls'!SauvegardeBdx_csv"
Par celle-ci :
Call SauvegardeBdx_csv
Avant la l'instruction End Sub il faut vider la variable publique en ajoutant :
Nom_Fichier = ""

Dans la procédure [Sub SauvegardeBdx_csv()] il faut ajouter une condition juste après :
Nom_Chemin = ActiveWorkbook.Path
'contrôler si procédure indépentante (variable [Nom_Fichier] est vide)
If Nom_Fichier = "" Then
Nom_Fichier = [Nom_Bdx]
End If

Et pour terminer, avant l'instruction End Sub il faut vider la variable publique en ajoutant :
Nom_Fichier = ""

Voilà en principe la procédure [SauvegardeBdx_csv] fonctionne seul ou sur appel dans la procédure [Sauvegardebordereau_xls()].
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
27 déc. 2010 à 08:53
Bonjour Le Pingou,

Je comprends ce que tu proposes et je pense que cela va fonctionner.
Je le crois d'autant plus que si je prends mes deux macros séparément elles fonctionnent parfaitement toute les deux.
Si j'intègre la seconde dans la première à la place de «Application.Run...» ça fonctionne également.

As-tu une explication au fait d'avoir cette erreur sur une macro et pas sur l'autre, alors que je fais exactement la même chose dans les deux :
- Déclaration de variable.
- Renseignement de cette variable.

Pour moi c'est un mystère que j'aimerais bien comprendre.
Je vais essayer ta proposition de ce pas.
Cordialement
Mistral
0
Le Pingou Messages postés 12186 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 13 novembre 2024 1 449
Modifié par Le Pingou le 27/12/2010 à 17:09
Bonjour,
Petite explication :
Comme base, j'ai admis que les 2 procédures sont dans le module du classeur d'origine.
Le problème vient de la variable [Nom_Bdx] qui se trouve dans la feuille [Menu] du classeur d'origine [Bdx&Etiquettes_EC.xls].
L'utilisation des 2 procédures séparément ne pose pas de problème car la variable [Nom_Bdx] est présente selon base admise.
Par contre lorsque vous appelez la deuxième procédure depuis la première, le classeur actif est le nouveau classeur créer [123456_Abc_def_Ghi_2010.xls] qui lui n'a pas la feuille [Menu] (seul la feuille [Bordereau] est copier dans le nouveau classeur)donc par déduction pas de variable [Nom_Bdx] se qui provoque le message d'erreur sur la ligne de code [Nom_Fichier = [Nom_Bdx]].

Note: en décortiquant votre code pour comprendre se que vous voulez réaliser, j'ai l'impression que vos données ne seront peut-être pas conforme ....!

Salutations.
Le Pingou
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
27 déc. 2010 à 17:20
D'accord j'ai compris! J'aurais dû y penser...
Mais quand on fait une erreur de raisonnement au départ c'est très difficile de s'en rendre compte ensuite. Mea culpa!

Par contre je ne saisi pas très bien le sens de cette phrase :

Note: en décortiquant votre code pour comprendre se que vous voulez réaliser, j'ai l'impression que vos données ne seront peut-être pas conforme ....!

Peux-tu m'en dire un peu plus.
Dans tous les cas merci pour ton aide et tes explications.
Cordialement
Mistral
0
Le Pingou Messages postés 12186 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 13 novembre 2024 1 449
Modifié par Le Pingou le 27/12/2010 à 17:36
Bonjour,
Tout simplement, je n'ai aucunes données pour tester vos 2 procédures complètement et en me basant uniquement sur les lignes de codes, j'ai l'impression que vous n'aurez pas le même résultat avec les deux procédures indépendantes qu'avec les deux imbriquées.
(Classeur : [123456_Abc_def_Ghi_2010.xls] différent de [123456_Abc_def_Ghi_2010.csv])
Salutations.
Le Pingou
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
27 déc. 2010 à 17:49
Exact mais c'est voulu.
Le fichier Xls servira à un envoi par Mail, il doit être le reflet exact de la feuille bordereau du classeur Bdx&Etiquettes. Je crée cette feuille à partir de l'originale pour la purger de toutes ces liaisons et des macros.
Par contre le fichier Csv est encore plus épuré pour pouvoir être repris et incorporé dans une autre application developpée avec Win Dev.
J'ai testé les deux façons de faire et vérifié le contenu des deux classeurs, ils sont conformes à ce que je voulais faire.
Cordialement
Mistral
0
Le Pingou Messages postés 12186 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 13 novembre 2024 1 449
27 déc. 2010 à 18:06
Bonjour,
Merci pour l'information.
Dans se cas tout est parfait.
0