Erreur sur sélection de plage de cellules

Fermé
laraville - Modifié par laraville le 2/08/2013 à 14:19
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 - 13 août 2013 à 09:25
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
2 août 2013 à 14:47
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
2 août 2013 à 16:01
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
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
Modifié par melanie1324 le 2/08/2013 à 16:24
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
2 août 2013 à 16:27
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
2 août 2013 à 16:52
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
2 août 2013 à 17:55
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
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
8 août 2013 à 11:25
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
Alors ca plante immédiatement sur la ligne 1

Membre de méthode ou données introuvables.
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
8 août 2013 à 14:46
remplace Dim Fichierdeliaison As Variant

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

feuille = Sheets.Name
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
8 août 2013 à 16:29
feuille = activeSheet.Name
0
Ah ca avance un peu mieux déjà! J'ai toujours une erreur 424 sur cette même ligne. "Objet requis"
0
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