Erreur de copie Range [Résolu]

BiGOuF 90 Messages postés vendredi 13 décembre 2002Date d'inscription 12 décembre 2007 Dernière intervention - 13 juin 2007 à 13:32 - Dernière réponse : BiGOuF 90 Messages postés vendredi 13 décembre 2002Date d'inscription 12 décembre 2007 Dernière intervention
- 14 juin 2007 à 13:13
Bonjour à toutes et à tous,

Je vous soumet ici un problème fort embettant.

Je dois, via une macro(Office 2003) copier le contenu de certaines parties d'une sheet d'un autre fichier excel dans une de mes Sheet, et il me fait une erreur de Range("").selection , je m'explique.

Chaque jour, un fichier est généré (il contient plusieures sheet), et je voudrai donc que ma macro, à la fin du mois, me permettent de faire un résumé mensuel, et pour ce, il doit aller ouvrir le fichier de chaque jour, ouvrir la sheet adéquate, et séléctionner certaines cellules de cette sheet, pour les rassembler dans une sheet unique.
J'ai donc, pour m'aider (je suis débutant), enregistré une macro me permettant de faire la manipulation pour un fichier, que j'ai implémenté dans une boucle For, me permettant ainsi de fonctionner pour chaque mois.

Voici donc mon code

Private Sub cmd_executer_copies_Click()
annee = Range("B2")
mois = Range("C2")If mois "01" Or mois "03" Or mois = "05" Or mois = "07" Or mois = "08" Or mois = "10" Or mois = "12" Then
jours = 31
ElseIf mois = "02" Then    If annee Mod 100 0 And annee Mod 400 0 Then
        jours = 29
    ElseIf annee Mod 100 <> 0 And annee Mod 4 = 0 Then
        jours = 29
    Else: jours = 28
    End If
Else
    jours = 30
End If
For i = 1 To jours
    If i < 10 Then
        j = "0" & i
    Else
        j = i
    End If
        ChDir "Z:\Opl_cs" & annee & "\Reports\Comparison_Markets_New" & annee & "-" & mois & ""
    Workbooks.Open Filename:= _
        "Z:\Opl_cs" & annee & "\Reports\Comparison_Markets_New" & annee & "-" & mois & "\Comp_Mark_" & annee & mois & j & ".XLS"
    Sheets("Données").Select
    Range("A1").Activate
    Range("A1:A26,H1:K26").Select   '<---Endroit où se situe l'erreur'1004' La méthode Select de la classe Range à échoué
    Range("H1").Activate
    Selection.Copy
    Windows("Copies.xls").Activate
    Range("A" & i * 26 + 2 & "").Paste
    Windows("Comp_Mark_" & annee & mois & j & ".XLS").Close
Next i
End Sub

Je vous remercie d'avance si vous pouvez m'aider à résoudre ce problème :)

PS : Le code n'est pas parfait, mais il s'agit d'un premier jet.
Afficher la suite 

Votre réponse

22 réponses

Meilleure réponse
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 14 juin 2007 à 11:59
3
Merci
Exemple:
ThisWorkbook.Sheets(1).Select
ThisWorkbook.Sheets(1).Range("A1").Copy
ActiveSheet.Paste Destination:=Worksheets(1).Range("A2")

 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)

Merci drikce06 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de drikce06
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 13 juin 2007 à 13:36
0
Merci
Salut chez moi ça fonctionne, mais ça revient au même que de faire ça Range("A1:K26").Select

Sinon juste avant seul sheets("").select suffit.
   Sheets("Données").Select
    Range("A1").Activate

 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
Commenter la réponse de drikce06
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 13 juin 2007 à 13:40
0
Merci
Ben maintenat ça prend bien les deux colonnes! Bizzard!

 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
Commenter la réponse de drikce06
BiGOuF 90 Messages postés vendredi 13 décembre 2002Date d'inscription 12 décembre 2007 Dernière intervention - 13 juin 2007 à 13:50
0
Merci
Salut chez moi ça fonctionne, mais ça revient au même que de faire ça Range("A1:K26").Select <-- Malheureusement, non, car je ne dois pas prendre ce qu'il y a entre le A et le H , donc, je dois me limiter à A1->A26  et H1->K26 :)

Et concernant le Range("A1").Activate, j'ai oublié de le supprimer dans mon paste d'ici, mais l'erreur est toujours là ('1004' La méthode Select de la classe Range à échoué).

J'avoue que je ne comprend pas vraiment l'erreur qu'il me donne.
J'ai consulté l'aide, et ils expliquent que le problème peut venir du fait que les colonnes soient vides .... or, ce n'est pas le cas :s
Commenter la réponse de BiGOuF
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 13 juin 2007 à 13:56
0
Merci
C'est bon voir mon deuxième poste.

Cette erreur arrive souvent avec la méthode copy, on dirait qu'il s'embrouille avec les feuilles et les classeurs

Essaye:
ActiveWorkbook. Sheets("Données").Select
ActiveWorkbook. Sheets("Données").Range("A1:A26,H1:K26").Select
Selection.Copy

 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
Commenter la réponse de drikce06
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 13 juin 2007 à 14:09
0
Merci
Salut à tous,

Jamais corrigé ni même invité à corriger ses errements, BigOuf continuera "ad vitam eternam" , je le crains,  à poster dans la présente section (VB.Net) ses quesqtions relatives à VBA.
Responsabilité partagée, donc, dans ce genre d'affaire...
Commenter la réponse de jmfmarques
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 13 juin 2007 à 14:12
0
Merci
Ha oui! J'avais pas vu! En fait je regarde même plus les catégorie je regarde que les post, elles de plus en plus à rien les catégorie.

 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
Commenter la réponse de drikce06
BiGOuF 90 Messages postés vendredi 13 décembre 2002Date d'inscription 12 décembre 2007 Dernière intervention - 13 juin 2007 à 14:13
0
Merci
Private Sub cmd_executer_copies_Click()
annee = Range("B2")
mois = Range("C2")If mois "01" Or mois "03" Or mois = "05" Or mois = "07" Or mois = "08" Or mois = "10" Or mois = "12" Then
jours = 31
ElseIf mois = "02" Then    If annee Mod 100 0 And annee Mod 400 0 Then
        jours = 29
    ElseIf annee Mod 100 <> 0 And annee Mod 4 = 0 Then
        jours = 29
    Else: jours = 28
    End If
Else
    jours = 30
End If
For i = 1 To jours
    If i < 10 Then
        j = "0" & i
    Else
        j = i
    End If
    ChDir "Z:\Opl_cs" & annee & "\Reports\Comparison_Markets_New" & annee & "-" & mois & ""
    Workbooks.Open Filename:= _
    "Z:\Opl_cs" & annee & "\Reports\Comparison_Markets_New" & annee & "-" & mois & "\Comp_Mark_" & annee & mois & j & ".XLS"
    ActiveWorkbook.Sheets("Données").Select
    ActiveWorkbook.Sheets("Données").Range("A1:A26,H1:K26").Select
    Selection.Copy
    Windows("Copies.xls").Activate
    ActiveWorkbook.Sheets("Feuil2").Select
    ActiveWorkbook.Sheets("Feuil2").Range("A" & i * 26 + 2 & "").Select
    ActiveWorkbook.Sheets("Feuil2").Range("A" & i * 26 + 2 & "").Paste
  '<--- Erreur d'exécution '438': Proprieté ou méthode non gérée par cet objet

    Windows("Comp_Mark_" & annee & mois & j & ".XLS").Close
Next i
End Sub

Et ben, j'ai vraiment pas de chance moi ;)

J'espère qu'on va pas me dire de laisser tomber ca, je cherche depuis le début de la journée ;)

Merci d'avance en tout cas.
Commenter la réponse de BiGOuF
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 13 juin 2007 à 14:15
Commenter la réponse de drikce06
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 13 juin 2007 à 14:17
0
Merci
Et au passage, essaye de poster dans la bonne catégorie s'il te plait, parce que je sais pas si tu l'as remarqué sur d'autres post mais ça énerve beaucoup de monde.Thèmes / Visual Basic 6 / Langages dérivés / VBA /

 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
Commenter la réponse de drikce06
BiGOuF 90 Messages postés vendredi 13 décembre 2002Date d'inscription 12 décembre 2007 Dernière intervention - 13 juin 2007 à 14:18
0
Merci
il me fait toujours l'erreur '438' sur Selection.paste (c'est bien ActiveWorkbook.Sheets("Feuil2").Range("A" & i * 26 + 2 & "").Pasteque je dois remplacer par Selection.paste hein?)
Commenter la réponse de BiGOuF
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 13 juin 2007 à 14:22
0
Merci
ActiveWorkbook.Sheets("Feuil2").Range("A" & i * 26 + 2 ).Paste





 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
Commenter la réponse de drikce06
BiGOuF 90 Messages postés vendredi 13 décembre 2002Date d'inscription 12 décembre 2007 Dernière intervention - 14 juin 2007 à 10:56
0
Merci
non, j'ai toujours la même erreur.
Je viens de vérifier, il ne reste plus qu'à coller dans la case A1, mais il me fait toujours l'erreur 438, et j'avoue ne pas comprendre :s
Commenter la réponse de BiGOuF
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 14 juin 2007 à 11:21
0
Merci
ActiveWorkbook.Sheets("Feuil2").Range("A" & i * 26 + 2 ).Select

Selection.Paste

 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
Commenter la réponse de drikce06
BiGOuF 90 Messages postés vendredi 13 décembre 2002Date d'inscription 12 décembre 2007 Dernière intervention - 14 juin 2007 à 11:31
0
Merci
Nan, j'ai toujours l'erreur 438 sur le Selection.Paste malheureusement :(

Voici mon code, au cas où j'aurais fait un mauvais copier-coller (on voit rarement ses erreurs, sinon, elles ne seraient plus présentes  )

Private Sub cmd_executer_copies_Click()
annee = Range("B2")
mois = Range("C2")If mois "01" Or mois "03" Or mois = "05" Or mois = "07" Or mois = "08" Or mois = "10" Or mois = "12" Then
jours = 31
ElseIf mois = "02" Then    If annee Mod 100 0 And annee Mod 400 0 Then
        jours = 29
    ElseIf annee Mod 100 <> 0 And annee Mod 4 = 0 Then
        jours = 29
    Else: jours = 28
    End If
Else
    jours = 30
End If
For i = 1 To jours
    If i < 10 Then
        j = "0" & i
    Else
        j = i
    End If
    ChDir "Z:\Opl_cs" & annee & "\Reports\Comparison_Markets_New" & annee & "-" & mois & ""
    Workbooks.Open Filename:= _
    "Z:\Opl_cs" & annee & "\Reports\Comparison_Markets_New" & annee & "-" & mois & "\Comp_Mark_" & annee & mois & j & ".XLS"
    ActiveWorkbook.Sheets("Données").Select
    ActiveWorkbook.Sheets("Données").Range("A1:A26,H1:K26").Select
    Selection.Copy
    Windows("Copies.xls").Activate
    ActiveWorkbook.Sheets("Feuil2").Select
   ActiveWorkbook.Sheets("Feuil2").Range("A" & i * 26 + 2).Select
   Selection.Paste      'Endroit de l'erreur 438
    Windows("Comp_Mark_" & annee & mois & j & ".XLS").Close
Next i
End Sub
Commenter la réponse de BiGOuF
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 14 juin 2007 à 11:34
0
Merci
Je reposte comme ça je me casse moins les yeux.

Private Sub cmd_executer_copies_Click()
annee = Range("B2")
mois = Range("C2")If mois "01" Or mois "03" Or mois = "05" Or mois = "07" Or mois = "08" Or mois = "10" Or mois = "12" Then
jours = 31
ElseIf mois = "02" Then    If annee Mod 100 0 And annee Mod 400 0 Then
        jours = 29
    ElseIf annee Mod 100 <> 0 And annee Mod 4 = 0 Then
        jours = 29
    Else: jours = 28
    End If
Else
    jours = 30
End If
For i = 1 To jours
    If i < 10 Then
        j = "0" & i
    Else
        j = i
    End If
    ChDir "Z:\Opl_cs" & annee & "\Reports\Comparison_Markets_New" & annee & "-" & mois & ""
    Workbooks.Open Filename:= _
    "Z:\Opl_cs" & annee & "\Reports\Comparison_Markets_New" & annee & "-" & mois & "\Comp_Mark_" & annee & mois & j & ".XLS"
    ActiveWorkbook.Sheets("Données").Select
    ActiveWorkbook.Sheets("Données").Range("A1:A26,H1:K26").Select
    Selection.Copy
    Windows("Copies.xls").Activate
    ActiveWorkbook.Sheets("Feuil2").Select
   ActiveWorkbook.Sheets("Feuil2").Range("A" & i * 26 + 2).Select
   Selection.Paste      'Endroit de l'erreur 438

    Windows("Comp_Mark_" & annee & mois & j & ".XLS").Close
Next i
End Sub




 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
Commenter la réponse de drikce06
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 14 juin 2007 à 11:36
0
Merci
Met MsgBox "A" & i * 26 + 2 un avant de faire le select pour voir ce que tu as.

 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
Commenter la réponse de drikce06
BiGOuF 90 Messages postés vendredi 13 décembre 2002Date d'inscription 12 décembre 2007 Dernière intervention - 14 juin 2007 à 11:42
0
Merci
j'ai A28 , ce qui est normal.
Une fois que tout marchera, je ferrai une suppression des row 1 à 27, pour que ca soit tout en haut.
Commenter la réponse de BiGOuF
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 14 juin 2007 à 11:53
0
Merci
ActiveWorkbook.Sheets("Feuil2").Paste Destination:=ActiveWorkbook.Sheets("Feuil2").Range("A" & i * 26 + 2).

Et voilà ce que donne F1.

 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
Commenter la réponse de drikce06
BiGOuF 90 Messages postés vendredi 13 décembre 2002Date d'inscription 12 décembre 2007 Dernière intervention - 14 juin 2007 à 11:53
0
Merci
Je viens de tenter un remplacement : 

   Range("A" & i * 26 + 2).PasteSpecial
   'Selection.Paste      'Endroit de l'erreur 438

Maintenant, il me met des "VRAI" toutes les 28 cases (mais rien entre)... maintenant, je peux concevoir que le pastespecial ne soit pas la bonne methode, mais quelle est la bonne alors ... les mystères de l'informatique :)
Quand je fais  Range("A" & i * 26 + 2).   , il ne me propose que "PasteSpecial" comme sous-menu, et pas de paste ... même chose, quand je fais Selection.   , aucun menu ne s'affiche, le problème ne viendrait-il pas de là ?

Il s'agirait donc d'une mauvaise methode pour l'objet selectionné (en l'occurence, une cellule).

Suis-je dans le bon?
Commenter la réponse de BiGOuF

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.