Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2011, 13h53   #1
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 134
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 134
Points : 29
Points : 29
Par défaut Copier Coller surprenant

Bonjour à tous et toutes

Je copie d'un fichier à un autre une plage de données et j'ai des résultats très surprenants

Voici tout d'abord la fonction qui copie les valeurs


Code :
1
2
  'Copie les données depuis le fichier base vers le fichier de travail
     xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("Listemater").Range("A4:k1500").Value = xlApp.Workbooks("Liste OPR et RECE.xls").Worksheets("Listemater").Range("A4:k1500").Value

Le fichier de base, dans mon exemple (liste OPR et RECE) ne comporte des données que sur les lignes 4 à 8

Le fichier destinataire comprend bien les bonnes données sur les lignes 4 à 8 mais aussi :
- des données aléatoires sur des lignes à partir de la ligne 52
- des cellules marquées #N/A à partir de la ligne 400

De plus, les numéros de lignes apparaissent en bleu et de nombreuses lignes disparaissent -59 à 76 par exemple-

C'est grave docteur ?

Merci de votre aide

Daniel S
familledacp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 14h28   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour

Mets ton code en entier pour pouvoir faire un diagnostic

Citation:
De plus, les numéros de lignes apparaissent en bleu et de nombreuses lignes disparaissent -59 à 76 par exemple-
Tu as un filtre.

Je me demande pourquoi tu travailles avec une autre instance Excel xlApp
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/12/2011, 14h37   #3
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

En complément de la réponse de mercatog, y a-t-il des lignes masquées dans les plages concernées de l'un ou l'autre classeur ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 15h57   #4
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 134
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 134
Points : 29
Points : 29
Rebonjour

Voici le code en entier


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Private Sub Commande224_Click()
'Lancement OPR et RECEPTIONS
 
    Dim Rep As String
    Rep = ""
    Rep = Forms("FAffaire").Controls("Repertoire").Value
 
 
 
    '> Ouvre le fichier excel OPR de l'affaire
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True
    xlApp.Workbooks.Open ("e:/1 - AFF/" & Rep & "/9-BASES/Liste OPR et RECE.xls")
    xlApp.Workbooks.Open ("e:/1 - AFF/" & Rep & "/9-BASES/Locaux.xls")
    xlApp.Workbooks.Open ("E:\1 - aff\AA divers novorest\00 - gestion affaires\00 Base\Modeles\NovoOPRmodele.xls")
 
 
    'Dim valeur As String
    'valeur = xlApp.Workbooks("Liste OPR et RECE.xls").Worksheets("Listemater").Range("B5").Value
    'MsgBox (valeur)
 
    'Effacer tout ce qu'il y a dans NovoOPRModele
    xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("Listemater").Range("A4:az6000").Clear
    xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("Listemater").Range("BB1").Clear
 
    'Copie les données depuis le fichier base vers le fichier de travail
     xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("Listemater").Range("A4:k1500").Value = xlApp.Workbooks("Liste OPR et RECE.xls").Worksheets("Listemater").Range("A4:k1500").Value
        'xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("Listelocaux").Range("A2:c6000").Value = xlApp.Workbooks("Locaux.xls").Worksheets("Loc").Range("A2:c6000").Value
    'xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("Lots").Range("A3:az6000").Value = xlApp.Workbooks("Liste OPR et RECE.xls").Worksheets("Lots").Range("A3:az6000").Value
    'xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("MOV").Range("A1:az6000").Value = xlApp.Workbooks("Liste OPR et RECE.xls").Worksheets("MOV").Range("A1:az6000").Value
    'xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("MOE").Range("A1:az6000").Value = xlApp.Workbooks("Liste OPR et RECE.xls").Worksheets("MOE").Range("A1:az6000").Value
 
 
    'Colorie les cases dans le fichier
 
    xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("ListeMAter").Range("A4:K6000").Interior.ColorIndex = 40
    xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("ListeMAter").Range("A4:K6000").Borders.ColorIndex = 2
    xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("ListeMAter").Range("A4:K6000").RowHeight = 25
 
 
 
    'Copie le nom de l'affaire pour le retour
    xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("Listemater").Range("BB1").Value = Rep
 
    'Ferme les fichiers de travail
    xlApp.Workbooks("Liste OPR et RECE.xls").Close
    xlApp.Workbooks("Locaux.xls").Close
 
End Sub

Par ailleurs, la ligne 3 des fichiers propose un filtre pour trier un peu mes données au besoin

A bientot

Daniel
familledacp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 16h16   #5
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Peut être il serait mieux de travailler avec les variables objet.
Tu pilote excel à partir de VB?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Private Sub Commande224_Click()
Dim XlApp As Object
Dim WbOPR As Object, WbLoc As Object, WbNov As Object
Dim Rep As String
 
Rep = Forms("FAffaire").Controls("Repertoire").Value
If Rep <> "" Then
    Set XlApp = CreateObject("Excel.Application")
    With XlApp
        .Visible = True
        'il faudra ajouter ici un test sur l'existence des fichiers à ouvrir
        Set WbOPR = .Workbooks.Open("e:/1 - AFF/" & Rep & "/9-BASES/Liste OPR et RECE.xls")
        Set WbLoc = .Workbooks.Open("e:/1 - AFF/" & Rep & "/9-BASES/Locaux.xls")
        Set WbNov = .Workbooks.Open("E:\1 - aff\AA divers novorest\00 - gestion affaires\00 Base\Modeles\NovoOPRmodele.xls")
 
        With WbOPR.Worksheets("Listemater")
            If .FilterMode Then .ShowAllData
        End With
 
        With WbNov.Worksheets("Listemater")
            If .FilterMode Then .ShowAllData
            .Range("A4:AZ6000").Clear
            .Range("A4:K1500").Value = WbOPR.Worksheets("Listemater").Range("A4:K1500").Value
            .Range("A4:K6000").Interior.ColorIndex = 40
            .Range("A4:K6000").Borders.ColorIndex = 2
            .Range("A4:K6000").RowHeight = 25
            .Range("BB1").Value = Rep
        End With
        WbNov.Close True
        Set WbNov = Nothing
        WbOPR.Close False
        Set WbOPR = Nothing
        WbLoc.Close
        Set WbLoc = Nothing
    End With
    XlApp.Quit
    Set XlApp = Nothing
End If
End Sub
EDIT: Déclarer en Object les variable WbXX
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 16h48   #6
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Essaie :

Code :
1
2
     xlApp.Workbooks("Liste OPR et RECE.xls").Worksheets("Listemater").Range("A4:k1500").Copy
     xlApp.Workbooks("Liste OPR et RECE.xls").Worksheets("Listemater").Range("A4").pastespeciam xlPasteValues
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 18h43   #7
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 134
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 134
Points : 29
Points : 29
Bonsoir Daniel C

Merci pour ces éléments

Petit souci, j 'ai une erreur 438 sur la ligne
Code :
 xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("Listemater").Range("A4").pastespeciam xlPasteValues
D'ailleurs, excel me demande de me positionner sur la cellule A4 où je dois coller (je précise que ce code est lancé depuis Access)



Mercatog, je regarde ce que tu as envoyé

Merci à tous les deux pour votre aide

Daniel
familledacp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 18h48   #8
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Au temps pour moi :

Code :
xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("Listemater").Range("A4").pastespecial xlPasteValues
Citation:
D'ailleurs, excel me demande de me positionner sur la cellule A4 où je dois coller
Non le code colle sans positionnement quelconque.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 19h01   #9
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 134
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 134
Points : 29
Points : 29
Re bonsoir Daniel

Merci pour la correction "special" au lieu de "speciam"

Donc ce code est lancé depuis Access

Quand je le lance, excel se bloque et me demande "selectionnez une destination et appuyez sur entrée ou cliquez sur coller" (si je le fais, le collage fonctionne bien)


et sous access, j'ai une erreur 1004 'la méthode PAstespécial de la classe Range a échoué"

Merci de ton aide

Daniel
familledacp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 19h46   #10
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Je ne peux malheureusement pas tester sous Access. Essaie :

Code :
xlApp.Workbooks("NovoOPRmodele.xls").Worksheets("Listemater").Range("A4:K1500").pastespecial xlPasteValues
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 19h47   #11
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 134
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 134
Points : 29
Points : 29
Bonsoir

J'ai essayé le code suivant, et cela fonctionne

Code :
 XlApp.Workbooks("Liste OPR et RECE.xls").Worksheets("Listemater").Range("A4:k1500").Copy XlApp.Workbooks("NovoOPRmodele.xls").Worksheets("Listemater").Range("A4")
Je continue à faire des tests car cela me parait trop beau pour être vrai

Bonne soirée

Daniel
familledacp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 19h53   #12
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Tant mieux à condition de na pas avoir de formules dans la plage source.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 08h51   #13
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 134
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 134
Points : 29
Points : 29
Bonjour Daniel

Et il n y en a pas ......

Encore Merci

Daniel
familledacp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h24.


 
 
 
 
Partenaires

Hébergement Web