Erreur de copie Range

Résolu
BiGOuF Messages postés 90 Date d'inscription vendredi 13 décembre 2002 Statut Membre Dernière intervention 12 décembre 2007 - 13 juin 2007 à 13:32
BiGOuF Messages postés 90 Date d'inscription vendredi 13 décembre 2002 Statut Membre Dernière intervention 12 décembre 2007 - 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.

22 réponses

drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
14 juin 2007 à 11:59
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)
3
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
13 juin 2007 à 13:36
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)
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
13 juin 2007 à 13:40
Ben maintenat ça prend bien les deux colonnes! Bizzard!

 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
0
BiGOuF Messages postés 90 Date d'inscription vendredi 13 décembre 2002 Statut Membre Dernière intervention 12 décembre 2007
13 juin 2007 à 13:50
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
0

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

Posez votre question
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
13 juin 2007 à 13:56
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)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
13 juin 2007 à 14:09
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...
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
13 juin 2007 à 14:12
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)
0
BiGOuF Messages postés 90 Date d'inscription vendredi 13 décembre 2002 Statut Membre Dernière intervention 12 décembre 2007
13 juin 2007 à 14:13
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.
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
13 juin 2007 à 14:15
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
13 juin 2007 à 14:17
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)
0
BiGOuF Messages postés 90 Date d'inscription vendredi 13 décembre 2002 Statut Membre Dernière intervention 12 décembre 2007
13 juin 2007 à 14:18
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?)
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
13 juin 2007 à 14:22
ActiveWorkbook.Sheets("Feuil2").Range("A" & i * 26 + 2 ).Paste





 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
0
BiGOuF Messages postés 90 Date d'inscription vendredi 13 décembre 2002 Statut Membre Dernière intervention 12 décembre 2007
14 juin 2007 à 10:56
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
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
14 juin 2007 à 11:21
ActiveWorkbook.Sheets("Feuil2").Range("A" & i * 26 + 2 ).Select

Selection.Paste

 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)
0
BiGOuF Messages postés 90 Date d'inscription vendredi 13 décembre 2002 Statut Membre Dernière intervention 12 décembre 2007
14 juin 2007 à 11:31
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
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
14 juin 2007 à 11:34
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)
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
14 juin 2007 à 11:36
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)
0
BiGOuF Messages postés 90 Date d'inscription vendredi 13 décembre 2002 Statut Membre Dernière intervention 12 décembre 2007
14 juin 2007 à 11:42
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.
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
14 juin 2007 à 11:53
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)
0
BiGOuF Messages postés 90 Date d'inscription vendredi 13 décembre 2002 Statut Membre Dernière intervention 12 décembre 2007
14 juin 2007 à 11:53
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?
0
Rejoignez-nous