Erreur sur sélection de plage de cellules

laraville -  
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'avais posé une question hier à laquelle vous avez merveilleusement bien répondu, mais je ne parviens pas à retrouver le topic... :/

Je suis toujours sur mon fichier et je suis face à un autre problème:

Je fais une macro qui doit me copier le contenu de la cellule IX et JX en fonction de la valeur de la cellule EX

La macro actuelle ne fonctionne pas et s'arrête à la ligne soulignée et m'affiche l'erreur suivante: Erreur 1004 Erreur définie par l'application ou par l'objet.

Pourriez-vous m'indiquer une solution?

Je vous remercie par avance.

Sub FLIP()

Dim classeurSource As Workbook
Dim classeurDestination As Workbook
Dim i As Integer

'ouvrir le classeur Automatisation en lecture seule
Set classeurSource = Application.Workbooks.Open("S:XXXXX", , True)
Application.DisplayAlerts = False

'définit le classeur destination
Set classeurDestination = Application.Workbooks.Open("YYYYY", , True)


classeurSource.Sheets("Fonds").Activate
Col = "E"
NumLig = 0
With Sheets("Fonds")
NbrLig = Cells(65536, Col).End(xlUp).Row

For Lig = 1 To NbrLig
If Cells(Lig, Col).Value = "Fond Interne" Then
Range(Cells(i, 9), Cells(i, 10)).Select
Selection.Copy
classeurDestination.Sheets("Feuil1").Activate
NumLig = NumLig + 1
Cells(NumLig, 1).Select
Cells(65535, 1).End(xlUp)(2).Select
ActiveSheet.Paste
End If
Next
End With

'fermer le classeur source
classeurSource.Close False


End Sub


5 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Ton sujet d'hier était sur le forum bureautique, ICI :
https://forums.commentcamarche.net/forum/affich-28389637-copie-conditionnee-date-vba
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
bonjour,

j'ai trouvé ton pb.
Ta variable i n'est pas définie et tu ui demandes de sélectionner cells(i,9) sauf que i = rien donc ca marche pas.
Remplace ton code par :
Sub FLIP()

Dim classeurSource As Workbook
Dim classeurDestination As Workbook
Dim i As Integer

'ouvrir le classeur Automatisation en lecture seule
Set classeurSource = Application.Workbooks.Open("S:XXXXX", , True)
Application.DisplayAlerts = False

'définit le classeur destination
Set classeurDestination = Application.Workbooks.Open("YYYYY", , True)


classeurSource.Sheets("Fonds").Activate
Col = "E"
NumLig = 0
With Sheets("Fonds")
NbrLig = Cells(65536, Col).End(xlUp).Row

For Lig = 1 To NbrLig
If Cells(Lig, Col).Value = "Fond Interne" Then
Range(Cells(Lig, 9), Cells(Lig, 10)).Select
Selection.Copy
classeurDestination.Sheets("Feuil1").Activate
NumLig = NumLig + 1
Cells(NumLig, 1).Select
Cells(65535, 1).End(xlUp)(2).Select
ActiveSheet.Paste
End If
Next
End With

'fermer le classeur source
classeurSource.Close False


End Sub
0
laraville
 
C'est parfait!

Par contre je voudrais que l'opération se répète jusqu'à la dernière ligne de mon classeur source (Toutes les lignes ayant "Fond Interne" dans la colonne E devront apparaitre dans mo classeur de destination. ici il s'arrète à la ligne 1. Faut-il que je lui fasse une loop?
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
non, c la macro qui est mal monté , remplaces ton code par :

Sub FLIP()

Dim classeurSource As Workbook
Dim classeurDestination As Workbook
Dim i As Integer

'ouvrir le classeur Automatisation en lecture seule
Set classeurSource = Application.Workbooks.Open("S:XXXXX", , True)
Application.DisplayAlerts = False

'définit le classeur destination
Set classeurDestination = Application.Workbooks.Open("YYYYY", , True)


classeurSource.Sheets("Fonds").Activate
Col = "E"
NumLig = 0
With Sheets("Fonds")

For Lig = 1 To 65536
classeurSource.Sheets("Fonds").Activate

If Cells(Lig, Col).Value = "Fond Interne" Then
Range(Cells(Lig, 9), Cells(Lig, 10)).Select
Selection.Copy
classeurDestination.Sheets("Feuil1").Activate
NumLig = NumLig + 1
Cells(NumLig, 1).Select
Cells(65535, 1).End(xlUp)(2).Select
ActiveSheet.Paste
End If
Next
End With

'fermer le classeur source
classeurSource.Close False


End Sub
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Entre la boucle qui se tape toutes les lignes de 1 à 65536 + les Select, changements de classeurs, ta macro en a pour ... au bas mot 25 minutes à traiter ça... Si elle ne plante pas excel entre temps...
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
coucou,

elle peut l'alléger comme ca :


Sub FLIP()

Dim classeurSource As Workbook
Dim classeurDestination As Workbook
Dim i As Integer

'ouvrir le classeur Automatisation en lecture seule
Set classeurSource = Application.Workbooks.Open("S:XXXXX", , True)
Application.DisplayAlerts = False

'définit le classeur destination
Set classeurDestination = Application.Workbooks.Open("YYYYY", , True)

classeurSource.Sheets("Fonds").Activate

Col = "E"
NumLig = 0
With Sheets("Fonds")

For Lig = 1 To 65536

If classeurSource.Sheets("Fonds").Cells(Lig, Col).Value = "Fond Interne" Then
NumLig = NumLig + 1
workbooks(classeurDestination).sheets("Feuil1").Cells(NumLig, 1) = workbooks( classeurSource).Sheets("Fonds").Cells(Lig, 9).Value
workbooks(classeurDestination).sheets("Feuil1").cells(Numlig,2) = workbooks(classeurSource).Sheets("Fonds").Cells(Lig, 10).Value

End If
Next
End With
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
C'est déjà beaucoup mieux.
Mais pourquoi boucler sur toutes les lignes. C'est ça que je ne comprends pas :
For Lig = 1 To 65536
0
laraville
 
Bonjour à tous,

Je tiens tout d'abord à vous remercier pour votre aide, j'avance à grands pas grâce à vous!

J'ai copié ton code mélanie, mais il plante sur la ligne

workbooks(classeurDestination).sheets("Feuil1").Cells(NumLig, 1) = workbooks( classeurSource).Sheets("Fonds").Cells(Lig, 9).Value

et sur la suivante.

Aurais-tu une idée pour le déboguer? je ne connais pas cette syntaxe.
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
coucou,

On va essayer comme ca :


Sub regroupementFR()
'
Dim Fichierdeliaison As Variant


'

'Ouvre tes fichier set mets à jour les liens

Workbooks.Open Filename:= _
"S:\AD Conseil\Fonds\Regroupement des données pour import MS Français.xls", _
UpdateLinks:=3
classeur = activeworkbook.name

Workbooks.Open Filename:="S:\AD Conseil\Fonds\1_Principal data fundlist.xlsm" _
, UpdateLinks:=3
a=activeworkbook.name

'sélectionnes la cellule A1 et tu choisis de copier la dernière cellule située sur la dernière colonne de la dernière ligne
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
ligne = activecell.row
colonne = activecell.column
feuille= sheets.name

' là tu as un pb, où veux-tu copier ta cellule. Car ces lignes disent que tu vas coller ta cellule qui est déjà sélectionnée mais il convient de dire range("A1").select
Windows("Regroupement des données pour import MS Français.xls").Activate
Sheets("Infos 1 principales datas").Select
'range("A1")
'je laisse ca mais tu devrais remplacer activecell par range("A1) = par ex
activecell
activecell = workbook(a).sheets(feuille).cells(ligne,colonne)

'copie la colonne D en A
Columns("D:D").Copy Columns("A:A")

'on ouvre un autre fichier
Workbooks.Open Filename:= _
"S:\AD Conseil\Fonds\BASE FONDS - PROTOTYPE\INPUT\2_Source Morningstar fundlist.xls"

source = activeworkbook.name

'essaie et si ca plante dis le, remplace nomfeuillepar le nom te feuille :
Range("A1:AE159").copy
workbooks(classeur).activate
Sheets("Infos de source 2").select
range("A1").select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Fichierdeliaison = Application.GetOpenFilename("Fichiers excel(*.xls),*.xls")
Fichierdeliaison = ActiveWorkbook.Name


Columns("F:F").Copy workbooks("Regroupement des données pour import MS Français.xls").Sheets("Custom Data").Columns ("A:A")
Workbooks("Fichierdeliaison").Sheets("FundManagementStyle").Columns("D:D").Copy workbooks("Regroupement des données pour import MS Français.xls").Sheets("Custom Data").Columns ("B:B")

Columns("A:B").Copy Sheets("en-GB").Columns("B:C")
Application.CutCopyMode = False
ActiveWorkbook.Save
Windows("Fund Updates.xls").Activate

ThisWorkbook.Sheets("Commandes").Activate
Cells(27, 6) = DateValue(Now)

End SubLien (#31)
0

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

Posez votre question
laraville
 
Alors ca plante immédiatement sur la ligne 1

Membre de méthode ou données introuvables.
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
remplace Dim Fichierdeliaison As Variant

par
Dim Fichierdeliaison, classeur, source, a, ligne, colonne As Variant
0
laraville
 
En fait il me met ".Name" sur la ligne suivante en surbrillance:

feuille = Sheets.Name
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
feuille = activeSheet.Name
0
laraville
 
Ah ca avance un peu mieux déjà! J'ai toujours une erreur 424 sur cette même ligne. "Objet requis"
0
laraville
 
J'ai solutionné, il me reste une erreur sur

Workbooks("Fichierdeliaison").Sheets("FundManagementStyle").Columns("D:D").Copy Workbooks("Regroupement des données pour import MS Français.xls").Sheets("Custom Data").Columns("B:B")

L'indice n'appartient pas à la sélection.
0