FORUM Tom's Hardware » Programmation » VB / VBA / VBS » probleme de copie Excel
 

probleme de copie Excel

Il y a 383 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : probleme de copie Excel
 
Plus d'informations

bonjour,
 
Je pense que c'est débile  
mais ma ligne de code ne passe pas

Code :
  1. feuille.Range("C" & x & ":C" & y & ",F" & x & ":F" & y & ",Q" & x & ":Q" & y & ",J" & x & ":J" & y & ",I" & x & ":I" & y & ",H" & x & ":H" & y & ",O" & x & ":O" & y & ",M" & x & ":M" & y).copy


 
alors que  
 

Code :
  1. Range("C" & x & ":C" & y & ",F" & x & ":F" & y & ",Q" & x & ":Q" & y & ",J" & x & ":J" & y & ",I" & x & ":I" & y & ",H" & x & ":H" & y & ",O" & x & ":O" & y & ",M" & x & ":M" & y).copy


 
fonctionne avec un code contenant des actives
 
si quelqu'un peut m'expliquer merci d'avance


Message édité par darkspoilt le 21-11-2007 à 11:43:00

zeb
Profil : Modérateur libre
Plus d'informations

>> un code conte des actives
Gné ? :heink:

 

>> ma ligne de code ne passe pas
Message d'erreur s'il te plaît.

 

Dans le premier exemple, vérifie ce que contient feuille en ajoutant un espion sur feuille par exemple.

 


EDIT: J'espère que tu ne vas pas nous faire des Copy/Paste/CutCopyMode :o


Message édité par zeb le 21-11-2007 à 11:47:50

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Il me met la méthode range de l'objet worksheet a échoué  
voile le code qui fonctionne pas
 

Code :
  1. Dim wbfile As Workbook
  2. Dim feuille As Worksheet
  3. NomFichierAlertes = Application.GetOpenFilename("Fichier xls, *.xls", , "ouvrir le fichier d'alertes (macro v35)" )
  4. Set wbfile = Application.Workbooks.Open(NomFichierAlertes)
  5. Set feuille = wbfile.Sheets("feuil2" )
  6. Range("A1" ).Select
  7. i = 2
  8. Do While ActiveCell.Value <> "0"
  9.     i = i + 1
  10.     x = i
  11.     Range("A1" ).Select
  12.     Range("A1" ).Offset(i, 0).Select
  13. Loop
  14. wbfile.feuille.Rows((i + 1) & ":20000" ).Delete Shift:=xlUp
  15.   Range("A2", Range("Y2" ).End(xlDown)).Sort Key1:=Range("A2" ), Order1:=xlAscending, Header:=xlGuess, _
  16.         OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  17.         DataOption1:=xlSortNormal
  18.    Count = 0
  19.    x = i + 1
  20.    y = i
  21.  
  22.      Do While ActiveCell.Value Like Banq
  23.              y = y + 1
  24.              Count = Count + 1
  25.              Range("A1" ).Offset(y, 0).Select
  26.      Loop
  27. feuille.Range("C" & x & ":C" & y & ",F" & x & ":F" & y & ",Q" & x & ":Q" & y & ",J" & x & ":J" & y & ",I" & x & ":I" & y & ",H" & x & ":H" & y & ",O" & x & ":O" & y & ",M" & x & ":M" & y).copy


 
et ca plante a la derniere ligne
 
voila le truc qui fonctionne
 

Code :
  1. Application.GetOpenFilename("Fichier xls, *.xls", , "ouvrir le fichier d'alertes (macro v35)" )
  2. Workbooks.OpenText Filename:=NomFichierAlertes, local:=True
  3. Range("A1" ).Select
  4. i = 2
  5. Do While ActiveCell.Value <> "0"
  6.     i = i + 1
  7.     x = i
  8.     Range("A1" ).Select
  9.     Range("A1" ).Offset(i, 0).Select
  10. Loop
  11.   Range("A2", Range("Y2" ).End(xlDown)).Sort Key1:=Range("A2" ), Order1:=xlAscending, Header:=xlGuess, _
  12.         OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  13.         DataOption1:=xlSortNormal
  14.    Count = 0
  15.    x = i + 1
  16.    y = i
  17.  
  18.      Do While ActiveCell.Value Like Banq
  19.              y = y + 1
  20.              Count = Count + 1
  21.              Range("A1" ).Offset(y, 0).Select
  22.      Loop
  23. Range("C" & x & ":C" & y & ",F" & x & ":F" & y & ",Q" & x & ":Q" & y & ",J" & x & ":J" & y & ",I" & x & ":I" & y & ",H" & x & ":H" & y & ",O" & x & ":O" & y & ",M" & x & ":M" & y).copy


 
voila

Plus d'informations

Bah je veut faire une selection de plage pour la copier dans une autre feuilles

zeb
Profil : Modérateur libre
Plus d'informations

Code 1
 
Ligne 4. Vire Application.
Ligne 7 à 14. Voir Code 2, ligne 5 à 12
 
Ligne 5 tu précises la feuille, lignes 7, 12, 13, 18, 29 tu ne le fais plus :( Tu le fais bien ligne 32.

Code :
  1. feuille.Range("A1" ).Select


 
Ligne 5, feuille est une des feuilles de wbfile. Pas besoin de le redire ligne 16 :

Code :
  1. feuille.Rows((i + 1) & ":20000" ).Delete Shift:=xlUp


 
Code 2
 
C'est quoi ce OpenText ?
 
Ligne 5 à 12 et 22 à 26 :/

Code :
  1. Dim c As Range
  2. Set c = Range("A1" )
  3. i = 2
  4. Do While c.Value <> "0"
  5.     i = i + 1
  6.     x = i
  7.     Set c = Range("A1" ).Offset(i, 0)
  8. Loop
  9. ..
  10. Do While c.Value Like Banq
  11.     y = y + 1
  12.     Count = Count + 1
  13.     Set c = Range("A1" ).Offset(y, 0)
  14. Loop


 
Quand je me relis, je me demande comment tu acceptes encore de publier sur PPC. J'espère quand même que toutes mes critiques t'aident ;)
 
 

Code :
  1. Range("C" & x & ":C" & y & ",F" & x & ":F" & y & ",Q" & x & ":Q" & y & ",J" & x & ":J" & y & ",I" & x & ":I" & y & ",H" & x & ":H" & y & ",O" & x & ":O" & y & ",M" & x & ":M" & y).copy


 
On ne peut pas faire de copie sur une sélection multiple :

Range("A1,A3" ).Copy

--> Plantage.
 
Pour t'en convaincre, essaie ça dans Excel :
 
Sélectionne A1. Appuye sur la touche CTRL et sélectionne A3.
Tente un Copier/Coller (CTRL+C/CTRL+V ou Menu Copier/Coler) : --> Plantage.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

pourtant ca marche parfaitement dans le code 2 (qui n'est pas le miens et qui ne doit pas eêtre touché logiquement)

zeb
Profil : Modérateur libre
Plus d'informations

:/ Collé. :(

 

Fais-le en plusieurs morceaux :

 
Code :
  1. Dim wbfile As Workbook
  2. Dim feuille As Worksheet
  3. Dim c As Range
  4. NomFichierAlertes = Application.GetOpenFilename("Fichier xls, *.xls", , "ouvrir le fichier d'alertes (macro v35)" )
  5. Set wbfile = Workbooks.Open(NomFichierAlertes)
  6. Set feuille = wbfile.Sheets("feuil2" )
  7. Set c = feuille.Range("C1" )
  8. Do While c.Value <> 0
  9.     Set c = c.Offset(1, 0)
  10. Loop
  11. x = c.Row
  12. feuille.Rows((x + 1) & ":20000" ).Delete
  13. feuille.Range("A2", Range("Y2" ).End(xlDown)).Sort(Range("A2" ))
  14. ' // Ici, il doit manquer un Set c = feuille.Range("C1" ) pour revenir en haut du tableau. Non ?
  15. Do While c.Value Like Banq
  16.     Set c = c.Offset(1, 0)
  17. Loop
  18. y = c.Row
  19. feuille.Range("C" & x & ":C" & y).Copy Destination:=XXXXXXXXXXXXXX
  20. feuille.Range("F" & x & ":F" & y).Copy Destination:=XXXXXXXXXXXXXX
  21. feuille.Range("H" & x & ":H" & y).Copy Destination:=XXXXXXXXXXXXXX
  22. feuille.Range("I" & x & ":I" & y).Copy Destination:=XXXXXXXXXXXXXX
  23. feuille.Range("J" & x & ":J" & y).Copy Destination:=XXXXXXXXXXXXXX
  24. feuille.Range("M" & x & ":M" & y).Copy Destination:=XXXXXXXXXXXXXX
  25. feuille.Range("O" & x & ":O" & y).Copy Destination:=XXXXXXXXXXXXXX
  26. feuille.Range("Q" & x & ":Q" & y).Copy Destination:=XXXXXXXXXXXXXX
 

Ligne 24 à 32 : c'est trop moche ?

 
Code :
  1. Dim colonnes(8) As String
  2. Dim colonne     As String
  3. colonnes(0)="C"
  4. colonnes(1)="F"
  5. colonnes(2)="H"
  6. colonnes(3)="I"
  7. colonnes(4)="J"
  8. colonnes(5)="M"
  9. colonnes(6)="O"
  10. colonnes(7)="Q"
  11. For Each colonne In colonnes
  12.     feuille.Range(colonne & x & ":" & colonne & y).Copy Destination:=XXXXXXXXXXXXXX
  13. Next


Cela te plaît-il ?


Message édité par zeb le 21-11-2007 à 15:40:09

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

im me met une erreur que each peut itérer que sur un objet collection ou sur un tableau

zeb
Profil : Modérateur libre
Plus d'informations

Ben colonnes(8) As String c'est bien un tableau non ?
Tu ne t'es pas trompé d'un "s" en recopiant ?
 


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

je devait mettre un s a colonne des lignes 3 à 10
 
et la ligen de l'intérieur c'est bien kom ca?
 

Code :
  1. feuille.Range(colonne & x & ":" & colonne & y).Copy Destination:=feuille.Cells(colonne, 1)


Message édité par darkspoilt le 21-11-2007 à 15:32:25
zeb
Profil : Modérateur libre
Plus d'informations

>>je devait mettre un s a colonne des lignes 3 à 10  
Désolé :( c'est corrigé ;)
 
ça me semble pas mal.
Je n'aime pas les & " " & " " &. Regarde ça :

Code :
  1. Range(feuille.Cells(colonne, x), feuille.Cells(colonne, y)).Copy(feuille.Cells(colonne, 1))


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Il met met incompatibilité de type
 

Code :
  1. Range(feuille.Cells(colonne, x), feuille.Cells(colonne, y)).Copy(feuille2.Cells(colonne, 1))

zeb
Profil : Modérateur libre
Plus d'informations

Gné ?
Type des variables feuille, feuille2, colonne, x, y ?
 
Pour être sûr, au moment du plantage, ajoute ces 5 variables dans la fenêtre espion de l'éditeur BA.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Code :
  1. Dim x As Integer
  2. Dim y As IntegerDim wbfile As Workbook
  3. Dim wbfile2 As Workbook
  4. Dim feuille As Worksheet
  5. Dim colonnes(8) As String
  6. Dim colonne    As Variant 'c demandé pour le each
  7. Dim feuille2 As Worksheet


Message édité par darkspoilt le 21-11-2007 à 16:12:53
zeb
Profil : Modérateur libre
Plus d'informations

Ligne 6. Mets le quand même en String, va.
 
Et ça plante dans la boucle ?
Pour quelle valeur de colonne justement ?
 
>> Pour être sûr, au moment du plantage, ajoute ces 5 variables dans la fenêtre espion de l'éditeur VBA. <<


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

bah non colonne en string ca passe pas c'est pour cela ke je qais kon met en variant

zeb
Profil : Modérateur libre
Plus d'informations

Oups, t'as raison :) - Et pas moi :(
 
Mes autres questions restent posées.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

bah comment fonctionne la fenêtre espion je l'affiche mais il ya  rien dedans

zeb
Profil : Modérateur libre
Plus d'informations

Chuuuuuut !!!! Je ne peux pas te le dire, c'est secret. Pour un espion normal.

Spoiler :

1°) Ouvre la fenêtre espion.
2°) Sélectionne une variable dans ton code, x par exemple, et fais-la glisser dans la fenêtre espion.
2'°) Bouton droit dans la fenêtre espion, ajouter un espion, mettre x par exemple dans l'expression à espionner.
3°) Attendre que le programme plante.
3'°) Mettre un point d'arrêt.
3"°) Mettre le mot-clef Stop là où l'on veut s'arrêter.
4°) Espionner la valeur pour les types simples, toutes les propriétés pour les objets.
 
Attention, ce message s'autodétruira dans 5 secondes


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

ca marche kom ca
 

Code :
  1. Set wbfile = Application.Workbooks.Open(NomFichierAlertes)
  2. Range("A1" ).Select
  3. i = 2
  4. Do While ActiveCell.Value <> "0"
  5.     i = i + 1
  6.     x = i
  7.     Range("A1" ).Select
  8.     Range("A1" ).Offset(i, 0).Select
  9. Loop
  10. 'a ce moment on a donc la premiere ligne vide qui est la ligne x
  11. ActiveWorkbook.ActiveSheet.Rows((i + 1) & ":20000" ).Delete Shift:=xlUp
  12.   Range("A2", Range("Y2" ).End(xlDown)).Sort Key1:=Range("A2" ), Order1:=xlAscending, Header:=xlGuess, _
  13.         OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom