Jean2208
Messages postés19Date d'inscriptiondimanche 7 janvier 2007StatutMembreDernière intervention22 septembre 2009
-
21 janv. 2007 à 20:39
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
23 janv. 2007 à 00:17
Bonsoir à tous,
j'ai un problème de copier-coller valeur sur une macro que je n'arrive pas a résoudre.
A chaque fois que je lance la macro il me met un message d'erreur et ne procéde pas à ma requete. Et me demande si je veux déboguer.
Mais si je mets fin et que je la relance une deuxieme ou troisieme fois ça marche!
Je voudrais ne plus recevoir le 1er msg et faire en sorte que la macro marche des la 1ere demande.
Pouvez-vous m'aider? D'avance, je vous remercie bcp bcp bcp
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 21 janv. 2007 à 21:08
Bonsoir,
Il faudrait que tu précise mieux les choses pour qu'on arrive à t'aider.
En effet, la macro est très mal construite. Par exemple, la boucle For i=1 to N , ne peut pas fonctionner puisque tu ne défini jamais N, donc N vaut 0 par défaut. Ce qui a pour conséquence que la boucle For sort tout de suite puisque i>N !!
Je pense que tu as réduit ton code, en oubliant des choses... Décrit plus simplement ce que tu veux faire.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 21 janv. 2007 à 21:18
Hou la la
For i = 1 To N
If ActiveCell = "0" Then
ActiveCell.Offset(1, 0).Select
Que vaut N lors du départ de la boucle ? As Byte n'oublie pas...
Changer ActiveCell pour Activecell.Value
ActiveCell.Offset(0, -21).Select
Tu commences ta boucle en sélectionnant la cellule A4 Offset(0,-21) recherche la 21e colonne vers la gauche donc erreur
Range(j).Select
Sheets("DB").Select
Range(j).Select
Je pense que le premier Range(j).select n'est pas nécessaire
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 21 janv. 2007 à 22:25
Salut,
bon beh tout est dit avec Us_30 et MPi, je rajouterai juste que tu as mis au début Application.ScreenUpdating = False, pense à le remettre à true à la fin de la procédure.
@++
<hr size ="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Vous n’avez pas trouvé la réponse que vous recherchez ?
Jean2208
Messages postés19Date d'inscriptiondimanche 7 janvier 2007StatutMembreDernière intervention22 septembre 2009 21 janv. 2007 à 22:36
Merci de vos réponses!
En fait je veux me mettre sur la colonne A4 regarder ce qui est different de 0.
Pour chaque ligne different de 0 se trouvant en H jusqu'a T, je veux que la macro les copie et les colle dans mon autre page " Mvt".
La macro semble marcher, me copie ce que je veux MAIS le souci c'est au niveau du collage spéciale ou la je reçois un msg d'erreur d'éxécution 1004
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 21 janv. 2007 à 22:47
d'erreur d'éxécution 1004
Oui, c'est cette erreur qui te dit que l'objet n'appartient pas à la selection.
Relis bien ce que te dit Us_30 et MPi, ils te donnent la cause de l'erreur
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Jean2208
Messages postés19Date d'inscriptiondimanche 7 janvier 2007StatutMembreDernière intervention22 septembre 2009 21 janv. 2007 à 23:33
Bonsoir Mortalino,
J'ai fait les quelques modifications mais le message d'erreur reste le même. Ce qui m'embête une nouvelle fois, c'est que qd le msg d'erreur apparait, je mets fin et il me copie qd même les données. Puis je n'ai plus de souci mais une fois que j'ai fermé le document, que je l'ouvre à nouveau et que je veux exporter les infos, je reçois encore le même msg! le même probleme survient puis tout fonctionne qd je la relance une nouvelle fois et ainsi de suite. comment faire, je n'y arrive plus.
Sub Mvt()
Dim i As Byte
Dim j As String
Application.ScreenUpdating = False
Sheets("DB").Select
ActiveSheet.Unprotect Password:="vbfrance"
Range("AC4").Select
For i = 1 To 150
If ActiveCell = "0" Then
ActiveValue.Offset(1, 0).Select
Else
j = ActiveCell.Address
ActiveCell.Offset(0, -21).Select
Range(ActiveCell.Address & ":" & ActiveCell.Offset(0, 12).Address).Select
Selection.Copy
Sheets("Mvt").Select
ActiveSheet.Unprotect Password:="vbfrance"
Range("C11").Select
While ActiveCell <> ""
ActiveCell.Offset(1, 0).Select
Wend
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range(j).Select
Sheets("DB").Select
ActiveSheet.Unprotect Password:="vbfrance"
Range(j).Select
ActiveCell.Offset(1, 0).Select
End If
Next i
Application.CutCopyMode = False
ActiveSheet.Protect Password:="vbfrance"
End Sub
Jean2208
Messages postés19Date d'inscriptiondimanche 7 janvier 2007StatutMembreDernière intervention22 septembre 2009 21 janv. 2007 à 23:52
Non, ça ne marche toujours pas!
Ce que je ne t'ai pas dit c'est que qd je lance la macro sans que le fichier soit protégé ça marche du premier coups mais une fois que je la protége ça ne passe plus, même si je mets une déprotection-protection ds la macro!
As-tu une idée???
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 22 janv. 2007 à 02:22
Quand ton code plante, ne fais pas FIN mais fais Débogage pour voir où ça plante. Ensuite, au besoin, fais F8 pour poursuivre le code ligne par ligne et trouver le bon endroit à problème.
Ce que tu peux faire, c'est comme suit
Sub MaSub()
On Error Goto Erreur
' ton code
Exit Sub ' à mettre pour ne passer par la gestion d'erreur à tous les coups
Erreur: ' début de la gestion d'erreurs
'Afficher le message d'erreur et éviter le plantage
msgbox Err.Number & vbcrlf & Err.Description
Stop 'Faire F8
Resume 'Faire F8 encore
End sub
Donc, quand il y a une erreur, la procédure va afficher le message d'erreur (lis-le), puis lorsque tu cliques OK, elle s'arrêtera sur STOP. Là, tu fais F8 qui te mène à RESUME, puis un autre F8 et là tu te retrouves sur la ligne à problème (en principe)
Si tu n'es pas certain que ce soit la ligne qui cause l'erreur, refais un autre F8
Si tu te retrouves encore au MsgBox, l'erreur est bel et bien là...
Jean2208
Messages postés19Date d'inscriptiondimanche 7 janvier 2007StatutMembreDernière intervention22 septembre 2009 22 janv. 2007 à 12:42
MPi, voici le code : je te mets en gras l'endroit ou la macro bug. Encore une fois c'est un Pb qui intervient une fois sur deux ou qd je ferme le doc puis que je l'ouvre et que je veux lancer la macro...
Sub MaSub()
On Error GoTo Erreur
Dim i As Byte
Dim j As String
Application.ScreenUpdating = False
Sheets("DB").Select
ActiveSheet.Unprotect Password:="vbfrance"
Range("AC6").Select
For i = 1 To 150
If ActiveCell.Value = "0" Then
ActiveCell.Offset(1, 0).Select
Else
j = ActiveCell.Address
ActiveCell.Offset(0, -21).Select
Range(ActiveCell.Address & ":" & ActiveCell.Offset(0, 12).Address).Select
Selection.Copy
Sheets("Mvt").Select
ActiveSheet.Unprotect Password:="vbfrance"
Range("C11").Select
While ActiveCell <> ""
ActiveCell.Offset(1, 0).Select
Wend
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range(j).Select
Sheets("DB").Select
ActiveSheet.Unprotect Password:="vbfrance"
Range(j).Select
ActiveCell.Offset(1, 0).Select
End If
Next i
Application.CutCopyMode = False
ActiveSheet.Protect Password:="vbfrance"
Exit Sub ' à mettre pour ne passer par la gestion d'erreur à tous les coups
Erreur: ' début de la gestion d'erreurs
'Afficher le message d'erreur et éviter le plantage
MsgBox Err.Number & vbCrLf & Err.Description
Stop 'Faire F8
Resume 'Faire F8 encore
Application.ScreenUpdating = True
End Sub