Aidez mois à réparer un copier-coller valeur!!!!!!!!!

Résolu
Jean2208 Messages postés 19 Date d'inscription dimanche 7 janvier 2007 Statut Membre Dernière intervention 22 septembre 2009 - 21 janv. 2007 à 20:39
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 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

Voici mon code :

Sub Mvt()


Dim i As Byte
Dim j As String


Application.ScreenUpdating = False
Sheets("DB").Select
Range("A4").Select


For i = 1 To N
    If ActiveCell = "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        
        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
        Range(j).Select
        ActiveCell.Offset(1, 0).Select
     End If
Next i
Application.CutCopyMode = False
End Sub

14 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
23 janv. 2007 à 00:17
Plutôt que Sheets("Mvt").Select
essaie Sheets("Mvt").Activate

MPi
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
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.


Amicalement,
Us.


 
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
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

MPi
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
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"
<!--
0

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

Posez votre question
Jean2208 Messages postés 19 Date d'inscription dimanche 7 janvier 2007 Statut Membre Dernière intervention 22 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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
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"
<!--
0
Jean2208 Messages postés 19 Date d'inscription dimanche 7 janvier 2007 Statut Membre Dernière intervention 22 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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
21 janv. 2007 à 23:40
Ton soucis, je pense qu'il se situe là :

For i = 1 To 150
    If ActiveCell = "0" Then
        ActiveValue.Offset(1, 0).Select
    Else

remplace par :

For i = 1 To 150
    If ActiveCell.Value = "0" Then
        ActiveCell.Offset(1, 0).Select
    Else
       (...)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
Jean2208 Messages postés 19 Date d'inscription dimanche 7 janvier 2007 Statut Membre Dernière intervention 22 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???
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
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à...

Dis-nous quelle est la ligne qui fait défaut ...

MPi
0
Jean2208 Messages postés 19 Date d'inscription dimanche 7 janvier 2007 Statut Membre Dernière intervention 22 septembre 2009
22 janv. 2007 à 10:10
Bonjour à tous,

je vous harcele encore, désolé!
MPi, j'ai essayé ce que tu m'as conseillé et il me met le message d'erreur suivant :

1004 la méthode PasteSpecial de la classe range  a échoué!

En fait le problème provient bien du copier coller valeur mais pourquoi je n'arrive pas à comprendre.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
22 janv. 2007 à 11:22
As-tu bien fait les modifications qu'on t'a expliquées ?
Si oui, remets le code pour voir où il en est rendu...

MPi
0
Jean2208 Messages postés 19 Date d'inscription dimanche 7 janvier 2007 Statut Membre Dernière intervention 22 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
0
Jean2208 Messages postés 19 Date d'inscription dimanche 7 janvier 2007 Statut Membre Dernière intervention 22 septembre 2009
22 janv. 2007 à 15:42
MPi,

je crois avoir trouvé au lieu de mettre On Error Resume Goto...

j'ai mis On Error Resume Next!
0