XL 2010 Ecrire dans un autre fichier ouvert - panne macro

jeanba

XLDnaute Occasionnel
Bonjour le Forum,

J'ouvre ce fil pour un bout de code qui marche un coup sur 2...
besoin de vos lumières.

Explications:
J'ai un classeur source (WbData) depuis lequel je copie certaines données vers un classeur destinataire (WbExp).

VB:
Option Explicit

Dim WbData As Workbook         ' WbData = Classeur de données source
Dim WbExp As Workbook          ' WbExp = Classeur destinataire
Dim ShData As Worksheet           ' ShData = Feuille du classeur de données source
Dim ShExpP As Worksheet           ' ShExpP = Feuille du classeur destinataire nommé "PARAMETRES"
Dim ShExpD As Worksheet          ' ShExpD = Feuille du classeur destinataire nommé "DONNEES"
Dim Mois, i&
Dim mmois, Nom, réponse

Private Sub UserForm_Initialize()
Set WbData = ThisWorkbook
End Sub

Private Sub CommandButton2_Click()

' 1. Ouvre le fichier destinataire
'     ------------------------------------    
Application.ScreenUpdating = False

Unload Me

' 2. Sélectionne le mois à clôturer et générer le fichier comptable

Mois = (Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", _
            "Décembre"))

For i = 1 To 12
    If Me.Controls("OptionButton" & i).Value = True Then
        If WbData.Sheets(Mois(i - 1)).Range("L4") = "" Then
            MsgBox ("Le journal du mois de " & WbData.Sheets(Mois(i - 1)).Range("B7") & " n'est pas clôturé! " & _
            Chr(10) & "Aucun transfert ne peut avoir lieu tant que le journal concerné n'est pas clôturé!")
            GoTo FIN

Le code renvoie l'erreur suivante :

upload_2017-6-21_13-21-41.png

Sur cette ligne:
upload_2017-6-21_13-22-22.png


Besoin de votre aide.

Merci

Jeanba
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Jeanba, bonjour le forum,

Je me demande si ton
Unload Me suivi quelque lignes plus loin d'un Me.Controls... ne serait pas le problème. Mais, dans ce cas, ça devrait être la ligne au-dessus de celle que tu as signalée qui se colore de jaune...
 

jeanba

XLDnaute Occasionnel
Bonsoir Robert,

En suivant ton conseil, j'ai modifié mon code comme suit:
VB:
Mois = (Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", _
            "Décembre"))
For i = 1 To 12
    If Me.Controls("OptionButton" & i).Value = True Then
        Unload Me
       
        With Sheets(Mois(i - 1))
            .Select
            If WbData.Sheets(Mois(i - 1)).Range("L4") = "" Then

Et là, il passe. Mais, quelques temps après, lorsque je lance la même procédure pour tester d'autres instructions ajoutées, il donne l'erreur suivante:

"Incompatibilité de type"
 

jeanba

XLDnaute Occasionnel
Bonjour Robert,

Non, j'ai rien supprimé.
Avant de joindre un fichier, je te propose de comprendre le but du code, peut-être existe t-il une autre manière de l'écrire:

Je copie des données d'une feuille du classeur actif vers une feuille de données (WbExpD) d'un autre classeur WbExp. Jusque là ça va.

La macro choisit la feuille source sur 12 (janvier à déc) en fonction de 12 OptionButton sur l'userform. Une fois cette feuille trouver, 2 choses:
- Unload Me
- activer la feuille sélectionner

Peut ensuite commencer la copie.
Mais, avant d'effectuer la copie, je dois tester que la valeur de la cellule L4 n'est pas nulle. Si c'est la cas, interruption de la procédure, sinon:
- copie de la plage souhaitée
- Paste vers la plage désignée dans le fichier destinataire
- enregistrement du classeur destinataire
- fermeture du classeur destinataire
- fin de la procédure
 

Discussions similaires