probleme de copie Excel
Dernière réponse : dans Programmation
bonjour,
Je pense que c'est débile
mais ma ligne de code ne passe pas
alors que
fonctionne avec un code contenant des actives
si quelqu'un peut m'expliquer merci d'avance
Je pense que c'est débile
mais ma ligne de code ne passe pas
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
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
Autres pages sur : probleme copie excel
Lassé par la pub ? Créez un compte
Il me met la méthode range de l'objet worksheet a échoué
voile le code qui fonctionne pas
et ca plante a la derniere ligne
voila le truc qui fonctionne
voila
voile le code qui fonctionne pas
Dim wbfile As Workbook
Dim feuille As Worksheet
NomFichierAlertes = Application.GetOpenFilename("Fichier xls, *.xls", , "ouvrir le fichier d'alertes (macro v35)")
Set wbfile = Application.Workbooks.Open(NomFichierAlertes)
Set feuille = wbfile.Sheets("feuil2")
Range("A1").Select
i = 2
Do While ActiveCell.Value <> "0"
i = i + 1
x = i
Range("A1").Select
Range("A1").Offset(i, 0).Select
Loop
wbfile.feuille.Rows((i + 1) & ":20000").Delete Shift:=xlUp
Range("A2", Range("Y2").End(xlDown)).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Count = 0
x = i + 1
y = i
Do While ActiveCell.Value Like Banq
y = y + 1
Count = Count + 1
Range("A1").Offset(y, 0).Select
Loop
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
Application.GetOpenFilename("Fichier xls, *.xls", , "ouvrir le fichier d'alertes (macro v35)")
Workbooks.OpenText Filename:=NomFichierAlertes, local:=True
Range("A1").Select
i = 2
Do While ActiveCell.Value <> "0"
i = i + 1
x = i
Range("A1").Select
Range("A1").Offset(i, 0).Select
Loop
Range("A2", Range("Y2").End(xlDown)).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Count = 0
x = i + 1
y = i
Do While ActiveCell.Value Like Banq
y = y + 1
Count = Count + 1
Range("A1").Offset(y, 0).Select
Loop
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
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.
Ligne 5, feuille est une des feuilles de wbfile. Pas besoin de le redire ligne 16 :
Code 2
C'est quoi ce OpenText ?
Ligne 5 à 12 et 22 à 26
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
On ne peut pas faire de copie sur une sélection multiple :
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.
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.
feuille.Range("A1" ).Select
Ligne 5, feuille est une des feuilles de wbfile. Pas besoin de le redire ligne 16 :
feuille.Rows((i + 1) & ":20000" ).Delete Shift:=xlUp
Code 2
C'est quoi ce OpenText ?
Ligne 5 à 12 et 22 à 26
Dim c As Range
Set c = Range("A1")
i = 2
Do While c.Value <> "0"
i = i + 1
x = i
Set c = Range("A1" ).Offset(i, 0)
Loop
..
Do While c.Value Like Banq
y = y + 1
Count = Count + 1
Set c = Range("A1" ).Offset(y, 0)
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
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.
Collé.
Fais-le en plusieurs morceaux :
Dim wbfile As Workbook Dim feuille As Worksheet Dim c As Range NomFichierAlertes = Application.GetOpenFilename("Fichier xls, *.xls", , "ouvrir le fichier d'alertes (macro v35)" ) Set wbfile = Workbooks.Open(NomFichierAlertes) Set feuille = wbfile.Sheets("feuil2") Set c = feuille.Range("C1" ) Do While c.Value <> 0 Set c = c.Offset(1, 0) Loop x = c.Row feuille.Rows((x + 1) & ":20000" ).Delete feuille.Range("A2", Range("Y2" ).End(xlDown)).Sort(Range("A2" )) ' // Ici, il doit manquer un Set c = feuille.Range("C1" ) pour revenir en haut du tableau. Non ? Do While c.Value Like Banq Set c = c.Offset(1, 0) Loop y = c.Row feuille.Range("C" & x & ":C" & y).Copy Destination:=XXXXXXXXXXXXXX feuille.Range("F" & x & ":F" & y).Copy Destination:=XXXXXXXXXXXXXX feuille.Range("H" & x & ":H" & y).Copy Destination:=XXXXXXXXXXXXXX feuille.Range("I" & x & ":I" & y).Copy Destination:=XXXXXXXXXXXXXX feuille.Range("J" & x & ":J" & y).Copy Destination:=XXXXXXXXXXXXXX feuille.Range("M" & x & ":M" & y).Copy Destination:=XXXXXXXXXXXXXX feuille.Range("O" & x & ":O" & y).Copy Destination:=XXXXXXXXXXXXXX feuille.Range("Q" & x & ":Q" & y).Copy Destination:=XXXXXXXXXXXXXX
Ligne 24 à 32 : c'est trop moche ?
Dim colonnes(8) As String Dim colonne As String colonnes(0)="C" colonnes(1)="F" colonnes(2)="H" colonnes(3)="I" colonnes(4)="J" colonnes(5)="M" colonnes(6)="O" colonnes(7)="Q" For Each colonne In colonnes feuille.Range(colonne & x & ":" & colonne & y).Copy Destination:=XXXXXXXXXXXXXX Next
Cela te plaît-il ?
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
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
ca marche kom ca
tu va me tuer mais ca marche (pour l'instant)
je prie pour ke ca marche tout le temps c'est une vrai usine a gaz mon code
ca pourais etre plus clean
Set wbfile = Application.Workbooks.Open(NomFichierAlertes)
Range("A1").Select
i = 2
Do While ActiveCell.Value <> "0"
i = i + 1
x = i
Range("A1").Select
Range("A1").Offset(i, 0).Select
Loop
'a ce moment on a donc la premiere ligne vide qui est la ligne x
ActiveWorkbook.ActiveSheet.Rows((i + 1) & ":20000").Delete Shift:=xlUp
Range("A2", Range("Y2").End(xlDown)).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
i = 1
Range("A1").Offset(i, 0).Select
Do While ActiveCell.Value
wbfile.Activate
Range("A1").Select
Range("A1").Offset(i, 0).Select
Banq = ActiveCell.Value
Count = 0
x = i + 1
y = i
Do While ActiveCell.Value Like Banq
y = y + 1
Count = Count + 1
Range("A1").Offset(y, 0).Select
Loop
Range("C" & x & ":C" & y & ",G" & x & ":G" & 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).Select
Selection.Copy
'On ouvre le fichier à envoyer
Workbooks.Open ("D:\Test2.xls")
Range("A1").Offset(2, 0).Select
ActiveSheet.Paste
wbfile.Activate
tu va me tuer mais ca marche (pour l'instant)
je prie pour ke ca marche tout le temps c'est une vrai usine a gaz mon code
ca pourais etre plus clean
Mais non, je ne vais pas te tuer. Mais ce code est tellement moche qu'il aurait pu être écrit par ton boss. Beurk
En plus, j'ai l'impression que tout ce que j'ai pu te dire a été inutile. Ce n'est pas gratifiant pour moi.
Comment trouver l'envie de continuer à aider dans ces conditions ?
Pourquoi Range("A1" ).Offset(2, 0) ?
Range("A3") ne suffit pas ?
Regarde (et étudie-le pour tout comprendre) :
En plus, j'ai l'impression que tout ce que j'ai pu te dire a été inutile. Ce n'est pas gratifiant pour moi.
Comment trouver l'envie de continuer à aider dans ces conditions ?
Pourquoi Range("A1" ).Offset(2, 0) ?
Range("A3") ne suffit pas ?
Regarde (et étudie-le pour tout comprendre) :
Dim wbfile As Workbook
Dim wbdest As Workbook
Dim feuille As Worksheet
Dim c As Range
Dim colonnes(8) As String
Dim i As Integer
colonnes(0)="C"
colonnes(1)="F"
colonnes(2)="H"
colonnes(3)="I"
colonnes(4)="J"
colonnes(5)="M"
colonnes(6)="O"
colonnes(7)="Q"
NomFichierAlertes = Application.GetOpenFilename("Fichier xls, *.xls", , "ouvrir le fichier d'alertes (macro v35)" )
Set wbfile = Workbooks.Open(NomFichierAlertes)
Set wbdest = Workbooks.Open ("D:\Test2.xls")
Set feuille = wbfile.Sheets("feuil2" )
Set c = feuille.Range("C1" )
Do While c.Value <> 0
Set c = c.Offset(1, 0)
Loop
x = c.Row
feuille.Rows((x + 1) & ":20000" ).Delete
feuille.Range("A2", Range("Y2" ).End(xlDown)).Sort(Range("A2" ))
' // Ici, il doit manquer un Set c = feuille.Range("C1" ) pour revenir en haut du tableau. Non ?
Do While c.Value Like Banq
Set c = c.Offset(1, 0)
Loop
y = c.Row
For i = 0 To 7
feuille.Range(colonnes(i) & x & ":" & colonnes(i) & y).Copy wbdest.Worksheets(1).Cells(i, 3)
Next
Pour les offset demande a mon chef moi je fais que adapter mon programme et surtout il doit fonctionner c'est pour ca ke j'ai fais ce ke j'ai fais avant c'et très crade mais toi ki disait qu'on peut pas faire une copie sur une sélection multiple la ca fonctionne.
Vive les mystère de l'informatique!! lol
Vive les mystère de l'informatique!! lol
Je teste sur Excel 2002 (v10)
Il y a une différence entre Range("A1:A2;C1:C1" ).Copy et Range("A1:A2;C1:C1" ).Select !
Le Select fonctionne, pas la copie. Et le problème est déporté sur la copie :
Effectivement, ton exemple contient des zones X2:X8 de même taille, donc il n'y aurait pas de problème pour la copie. Dans mon test, A1:A2;C1:C2 fonctionne, pas A1:A2;C1:C1.
Bref, c'est tellement tordu, que je te propose de règler ton problème avec un gros
Il y a une différence entre Range("A1:A2;C1:C1" ).Copy et Range("A1:A2;C1:C1" ).Select !
Le Select fonctionne, pas la copie. Et le problème est déporté sur la copie :
Range("A1:A2;C1:C1" ).Copy ' // marche pas Range("A1:A2;C1:C1" ).Select ' // marche, mais c'est moche Selection.Copy ' // marche pas, en plus c'est moche
Effectivement, ton exemple contient des zones X2:X8 de même taille, donc il n'y aurait pas de problème pour la copie. Dans mon test, A1:A2;C1:C2 fonctionne, pas A1:A2;C1:C1.
Bref, c'est tellement tordu, que je te propose de règler ton problème avec un gros
(pas de select ni de paste), mais laisse-moi en public ne pas le conseiller.
feui1.Range("C2:C8,G2:G8,Q2:Q8,J2:J8,I2:I8,H2:H8,O2:O8,M2:M8" ).Copy feui2.Range("A1")
Non, ça ne marche pas justement. Ca marche dans la plupart des cas.
Imagine que deux macros fonctionnent en même temps. Quelle fenêtre sera active, quelle plage sera sélectionnée ? C'est improbable. Ah bon.
Et le presse-papier ? Si ta macro Excel l'utilise pour copier des valeurs d'une feuille à l'autre (Copy/Paste au lieu de Copy Destination:=XXXX qui n'utilise pas le presse-papier) et que par ailleurs une autre macro, un autre programme, voire toi-même dans une autre application tu l'utilises. Que se passe-t'il ?
Si je vous embête tous(*) avec ça, c'est pour vous faire profiter de beaucoup d'expériences accumulées, ceci dit sans fausse modestie.
(*) Oui, j'embête tout le monde avec ça : http://www.google.com/search?q=select+selection+copy+pa...
Imagine que deux macros fonctionnent en même temps. Quelle fenêtre sera active, quelle plage sera sélectionnée ? C'est improbable. Ah bon.
Et le presse-papier ? Si ta macro Excel l'utilise pour copier des valeurs d'une feuille à l'autre (Copy/Paste au lieu de Copy Destination:=XXXX qui n'utilise pas le presse-papier) et que par ailleurs une autre macro, un autre programme, voire toi-même dans une autre application tu l'utilises. Que se passe-t'il ?
Si je vous embête tous(*) avec ça, c'est pour vous faire profiter de beaucoup d'expériences accumulées, ceci dit sans fausse modestie.
(*) Oui, j'embête tout le monde avec ça : http://www.google.com/search?q=select+selection+copy+pa...
Oui ????
Le cutcopymode, c'est un truc qu'il ne faut pas oublier de mettre à Faux quand on a commencer à couper ou coller sous Excel. Ce sont les petits pointillés autour de la zone coupée ou collée. Donc après un Cut/Paste ou un Copy/Paste, penser à faire un CutCopyMode = False.
Mais comme un programmeur propre n'utilise pas le presse-papier pour affecter des valeurs, la question ne se pose pas
Le cutcopymode, c'est un truc qu'il ne faut pas oublier de mettre à Faux quand on a commencer à couper ou coller sous Excel. Ce sont les petits pointillés autour de la zone coupée ou collée. Donc après un Cut/Paste ou un Copy/Paste, penser à faire un CutCopyMode = False.
Mais comme un programmeur propre n'utilise pas le presse-papier pour affecter des valeurs, la question ne se pose pas
Code 1. Copy est une procédure, pas une fonction. Donc il faut virer les parenthèses. Si wbtemp est un Workbook, alors sache qu'un classeur n'a pas de lignes. En revanche, il a des feuilles de calcul qui elles possèdes des lignes. SI tu jongle avec les classeurs et les feuilles, il manque leur référence avant le Rows("1:183")
Code 2. Même problème.
Code 2. Même problème.
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumHp psc 1215 probleme de copie
- ForumProbleme de copie de fichier windows
- ForumProbleme sur copie vhs avec dazzle
- ForumFaire une copie excel macro
- ForumProbleme copie windows xp
- benchmarkProbleme copie fichiers avec windows 7
- ForumProbleme copie dvd video
- ForumWindows media player 9 probleme de copie de musique
- ForumExcel probleme reference
- ForumExcel enregistrer une copie
- Voir plus
- Et pas moi