Erreur 1004 erreur définie par l'application ou par l'objet avec range
Bonjour à tous,
J'ai cette erreur lorsque j'utilise une fonction range : "Erreur 1004 erreur définie par l'application ou par l'objet"
Voici mon code :
' ----- VARIABLES -----
Dim projet As String
Dim lastRowEFGL As Integer
Dim lastColEFGL As Integer
Dim colEFGL As Integer
' ----- MISE EN PLACE -----
Application.DisplayAlerts = False
'Définiton des chemins
strEFGL = Application.GetOpenFilename(, , "Choisir l'EFGL adapté")
'Ouverture des fichiers
Set WbAColler = ThisWorkbook
Set WbEFGL = Workbooks.Open(strEFGL)
ActiveSheet.AutoFilterMode = False
'Création 2 nouvelles feuilles
WbAColler.Sheets.Add.Name = "Data"
WbAColler.Sheets.Add.Name = "Data2"
'Dernière ligne et colonne de l'EFGL
lastRowEFGL = WbEFGL.Worksheets("Synthèse").Range("F" & WbEFGL.Worksheets("Synthèse").Rows.Count).End(xlUp).Row
lastColEFGL = WbEFGL.Worksheets("Synthèse").Cells(1, Columns.Count).End(xlToLeft).Column
'Demande du projet à l'utilisateur
projetDemande.Show
projet = WbAColler.Worksheets("Data").Range("F1").Value
'Copie des valeurs de l'EFGL
For i = 0 To lastColEFGL
If WbEFGL.Worksheets("Synthèse").Cells(1, i + 1).Value = projet Then
colEFGL = i + 1
End If
Next i
WbEFGL.Worksheets("Synthèse").Range("F12:F" & lastRowEFGL).Copy
WbAColler.Worksheets("Data2").Range("A1").PasteSpecial Paste:=xlPasteValues
WbEFGL.Worksheets("Synthèse").Range(Cells(12, colEFGL), Cells(lastRowEFGL, colEFGL)).Copy
WbAColler.Worksheets("Data2").Range("B1").PasteSpecial Paste:=xlPasteValuesEt voici le code de ma boite de dialogue qui me renvoie le "projet" :
Private Sub ComboBox_projet_Change()
End Sub
Private Sub CommandButton_valider_Click()
If ComboBox_projet.ListIndex = -1 Then
MsgBox "Sélectionner un projet"
Exit Sub
End If
Set WbAColler = ThisWorkbook
projet = ComboBox_projet.Value
WbAColler.Worksheets("Data").Range("F1") = projet
Unload projetDemande
End Sub
Private Sub Label1_Click()
End Sub
Private Sub UserForm_Initialize()
ComboBox_projet.AddItem "BCB_GSR2"
End SubPour résumer en quelques mots, je veux copier dans un fichier que j'appelle "WbAColler" certaines colonnes d'un fichier "WbEFGL" en fonction de ce que choisit l'utilisateur (pour l'instant il n'a qu'un seul choix).
La recherche de la colonne se passe bien mais l'erreur vient à la ligne :
WbEFGL.Worksheets("Synthèse").Range(Cells(12, colEFGL), Cells(lastRowEFGL, colEFGL)).Copy
WbAColler.Worksheets("Data2").Range("B1").PasteSpecial Paste:=xlPasteValuesDe plus, lorsque je rentre dans le code le nom du projet plutôt que laisser l'utilisateur choisir cela fonctionne.
Avez-vous une idée d'où peut venir le problème ?
Merci d'avance
Tayrok
Bonjour Tayrok
Dans le module ne faut t'il pas déclarer une variable publique:
Public wbaColler
Sinon ajoute en tête du module et du UserForm :
Option Explicit
Compile pour vérifier que tout est bien défini.
Si cela ne passe pas transfère nous un classeur avec code VBA en format xlsm
Bonjour Scraper,
Merci pour ta réponse. J'ai ajouté Option Explicit et il m'a remonté quelques variables qui n'étaient pas définies. Merci pour cela, mon code est plus propre mais ça n'a malheureusement pas réglé mon problème.
Autre phénomène étrange, quand les onglets Data et Data2 sont créés avant de lancer la macro (je commente donc les lignes servants à les créer), cela fonctionne sans problème.
Les informations sur les fichiers que j'utilise sont privés, je ne peux pas les partager. Comment puis-je vous apporter les informations nécessaires sans pour autant vous envoyer mes fichiers ?
Merci
Re bonjour,
Une petite précision, les variables colEFGL et lastRowEFGL valent repectivement 470 et 904 (on fichier d'origine est assez énorme).
Est-ce que cela peut poser un problème ?
Pour vous aider, un utilitaire a été réalisé par l'admin du forum --> https://forum.excel-pratique.com/forum/anonymiser-les-donnees-confidentielles-des-fichiers-excel-107.
Merci c'est exactement ce qu'il me fallait !
Je joins donc à ce message le fichier dont je veux récupérer les données (il est tellement grand que je n'ai mis que les 2 colonnes que j'utilises, c-à-d la F et la RB. Le nombre de ligne est respecté).
Et le fichier dans lequel je veux les copier.