Autres Application.Quit Erreur d'exécution 13

sg394

XLDnaute Nouveau
Bonjour!

J'aurais encore besoin de vos lumières!

Dans mon code, j'ai cette commande:
If Not Range("P4").Value Like "Version 0.3" Then Application.Quit

Étrangement, plutôt que de quitter immédiatement, j'ai un message d'erreur:
Erreur d'exécution "13":
Incompatibilité de type

Je n'arrive pas à comprendre pourquoi. Ne riez pas de moi, je débute en VBA!
 
Solution
Bonjour sg394, le fil,

tes 2 fichiers en retour. :)

pour ton 1er fichier, code VBA de Module1 :

VB:
Sub maj()
  With Workbooks("Registre de production.xlsm").Worksheets("Feuil1")
    If .[P4] Like "*Version 0.3*" Then
      '================================
      'modifications
      .[M6:M10].Interior.Color = 49407
      '================================
      ActiveWorkbook.Save
    End If
  End With
  Application.Quit
End Sub

j'ai laissé Like "*Version 0.3*" ; mais si en P4 tu saisis toujours une donnée comme "Version 0.3" ou "Version 1.4" sans rien d'autre à gauche, ni à droite, alors...​

soan

XLDnaute Barbatruc
Inactif
Bonsoir sg394, sylvanu,

"Version 0.3" est du texte ; je suppose que ta cellule P4 n'est pas du texte ; c'est peut-être une valeur d'erreur comme par exemple : #REF! ; vérifie aussi si cette cellule P4 est bien celle de la feuille active ; au besoin, ajoute une référence de feuille ; par exemple : Worksheets("Feuil5").Range("P4")

soan
 

Orson83

XLDnaute Impliqué
Bonjour!

J'aurais encore besoin de vos lumières!

Dans mon code, j'ai cette commande:
If Not Range("P4").Value Like "Version 0.3" Then Application.Quit

Étrangement, plutôt que de quitter immédiatement, j'ai un message d'erreur:
Erreur d'exécution "13":
Incompatibilité de type

Je n'arrive pas à comprendre pourquoi. Ne riez pas de moi, je débute en VBA!
Bonsoir sg994,
Un essai en associant ces 2 lignes ensemble :
VB:
    Application.DisplayAlerts = False
    Application.Quit
@+
 

sg394

XLDnaute Nouveau
sylvanu
Même erreur avec If Not (Range("P4") Like "*Version 0.3*") Then Application.Quit

Précision, ce n'est pas du pas-à-pas. C'est la seule cellule à vérifier.

soan
Avec la cellule en format texte, même erreur. Et c'est bien la feuille active.


Masquer l'erreur avec "On Error Resume Next" fonctionne très bien! J'aurais quand même préféré COMPRENDRE l'erreur, parce que je veux apprendre! Mais ça fonctionne et c'est ce qui importe. Merci à vous tous!
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Précision, ce n'est pas du pas-à-pas. C'est la seule cellule à vérifier.
Le pas à pas c'est l'exécution ligne par ligne du code, rien à voir avec l'instruction VBA.
La PJ fourni marche avec mon XL2007. P5 ne contient pas la chaine donc XL se ferme.
20210312_195211.gif
 
Dernière édition:

Orson83

XLDnaute Impliqué
Bonsoir François,

même si ce que tu proposes marcherait, ça serait pour masquer l'erreur, pas pour la solutionner ! 😜 à ce compte-là, pourquoi pas utiliser par exemple On Error Resume Next ? ou On Error GoTo ? 😃

soan
Salut soan,
Il ne t'arrive pas de passer l'aspirateur et de mettre sous le tapis ? 😂 je plaisante.
Perso j'ai une macro qui fonctionne avec cette association mais je n'ai pas d'erreur.
Je laisse la main aux experts...
Bonne soirée.
 

sg394

XLDnaute Nouveau
D'accord! Mais les macros sont tellement simples que je crois que les transcrire ici sera aussi utile. Mais je dois vous expliquer un peu plus en détails.
Le premier fichier est un registre. Voilà ce qu'il contient:

Sub Auto_Open()
If Dir("P:\play\prog\regmaj_on.ini") = "" Then Exit Sub
Application.Run "'P:\play\prog\MAJ.xlsm'!maj"
End Sub

Vous voyez que cette macro s'active automatiquement et ne s’exécute que si un fichier existe. Ce fichier sert d'interrupteur et est mis en place par un programme batch, lequel ouvre les différents registres un par un. Le but est de mettre à jour leur structure, par exemple en ajoutant ou en modifiant des colonnes. Cette macro, intégrée d'origine dans tous les registres, lance une macro créée ultérieurement et contenue dans un autre fichier.

Voici maintenant ce que contient la macro de mise à jour:

Sub maj()
On Error Resume Next

If Not (Range("P4") Like "*Version 0.3*") Then Application.Quit
'================================
'modifications
Range("M6:M10").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 49407
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'================================
ActiveWorkbook.Save
Application.Quit
End Sub

Les modifications de la structure du fichier sont entre les lignes. Les modifications écrites ici n'ont aucun sens et servent seulement pour mes tests. Dans le futur, c'est entre ces lignes que je transcrirais une macro selon mes besoins.

La fonction qui était problématique sert à vérifier la version du fichier de registre afin que les modifications ne soient pas appliquées par erreur à un registre pour lequel elles ne sont pas conçues. Et ce numéro est justement écrit dans la cellule P4.

Finalement, le fichier est sauvegardé et l'application est fermée, ce qui permet au programme batch de continuer son exécution et d'ouvrir le prochain fichier excel.
 

Pièces jointes

  • MAJ forum.xlsm
    15.4 KB · Affichages: 2
  • Registre de production forum.xlsm
    18 KB · Affichages: 2

soan

XLDnaute Barbatruc
Inactif
Bonjour sg394, le fil,

tes 2 fichiers en retour. :)

pour ton 1er fichier, code VBA de Module1 :

VB:
Sub maj()
  With Workbooks("Registre de production.xlsm").Worksheets("Feuil1")
    If .[P4] Like "*Version 0.3*" Then
      '================================
      'modifications
      .[M6:M10].Interior.Color = 49407
      '================================
      ActiveWorkbook.Save
    End If
  End With
  Application.Quit
End Sub

j'ai laissé Like "*Version 0.3*" ; mais si en P4 tu saisis toujours une donnée comme "Version 0.3" ou "Version 1.4" sans rien d'autre à gauche, ni à droite, alors c'est mieux que tu mettes plus simplement :

* If .[P4] = "Version 0.3" Then (pour ton fichier "Registre de production.xlsm" Version 0.3)

* If .[P4] = "Version 1.4" Then (pour ton fichier "Registre de production.xlsm" Version 1.4)

si y'a aucun caractère à gauche, mais qu'il peut y en avoir à droite, par exemple en P4 : "Version 0.3542", alors tu peux mettre : If .[P4] Like "Version 0.3*" Then (pas d'étoile à gauche et une étoile à droite)

note bien que Application.Quit est exécuté dans tous les cas ; c'est inutile de mettre 2× cette instruction !​



pour ton 2ème fichier :

* j'ai démasqué les 5 colonnes A:E (vides)

* j'ai vérifié le format de la cellule P4 ; c'est : Texte ; j'ai laissé tel que, même si tu aurais pu laisser le format initial Standard : ça convient tout à fait pour "Version 0.3" ou "Version 1.4".

* je te laisse lire attentivement le nouveau commentaire de la cellule i18. 😜 en V19:W23 : suggestions pour tes prochains lieux de tournage. 😂

* j'aime bien ta sub Auto_ Open() dans Module1 ! 😁 😄 ça a un charme suranné indéniable, car ça fait bien longtemps maintenant qu'on ne l'utilise plus ! à la place, c'est la sub Workbook_Open(), qui doit être placée dans ThisWorkbook.
VB:
Private Sub Workbook_Open()
  If Dir("P:\play\prog\regmaj_on.ini") <> "" Then _
    Application.Run "'P:\play\prog\MAJ.xlsm'!maj"
End Sub

à toi de tester, puis à te lire pour avoir ton avis. ;)

soan
 

Pièces jointes

  • MAJ forum.xlsm
    15.2 KB · Affichages: 2
  • Registre de production.xlsm
    18.5 KB · Affichages: 3
Dernière édition:

Orson83

XLDnaute Impliqué
Bonjour sg394, le fil,
@sg394 : merci d'indiquer que Soan a résolu ton problème au post #14.
En ce qui me concerne, tu ne peux m'attribuer le statut "Résolu" au post #2 pour une solution qui gère simplement une erreur. Merci.
Il faut rendre à Soan ce qui appartient à César (ça t'irait bien César 🤔) 😁😁
 

Discussions similaires