Erreur d'execution 28

Bonjour,
j'ai ce message qui apparait "erreur d'exécution 28" après avoir activer la macro.
celle-ci est répétitive, elle fonctionne 95 fois environ, puis ce message apparait.
Je comprend que c'est l'appel d'une macro par une autre macro qui pose problème, mais je ne vois pas comment le résoudre.
voici le code;

Sub debutcopier()
Range("c3").Select
Application.Run "copiertout"
End Sub

Sub copiertout()
If Selection <> (" ") Then
ActiveCell.Offset(0, 6).Select
Selection.Copy
ActiveCell.Offset(0, 5).Select
Selection.PasteSpecial xlPasteValues
ActiveCell.Offset(0, -11).Select
ActiveCell.Offset(1, 0).Select
Application.Run "recomcopiertout"
Else
Application.Run "copiertoutsuite"
End If
End Sub

Sub copiertoutsuite()
ActiveCell.Offset(1, 0).Select
Application.Run "copiertout"
End Sub

Sub recomcopiertout()
Application.Run "copiertout"
End Sub

Merci de votre aide (si vous pouvez m'aider)
Configuration: Windows Vista
Firefox 3.0.11

6 réponses

  1. Bonjour,

    voici une très belle démonstration du serpent qui se mord la queue....

    le code est très clair pourtant...

    debut je vais dans copiertout, je controle
    if (premier passage) <> " " then
    on copie
    puis on repasse dans la boucle car tu appelle copiertout
    else
    execute copiertoutdesuite qui appelle copiertout
    je repasse dans le if (2ème passage).....
    ..... et 7 boucles plus loin plantage et on ne vois pas l'erreur d'imbrication.

    endif

    il faut écrire.....

    toutes les actions que tu veux faire et simplifier (éliminer!!!) les imbrications.
    Ton problème vient de deux points :
    1) l'utilisation de activecell (qui rend service) mais tu ne sais plus ou tu es quand tu reviens sur ta source
    2) sans doute une utilisation du "if" a améliorer.

    il est cependant difficile de t'aider car en analysant ton programme
    on comprend que tu veux executer plusieurs fois la même boucle mais on ne sais pas pourquoi...
    Du moins moi je ne comprend pas.

    Je te conseille d'expliquer.
    1. merci beaucoup pour ta réponse BIDOUILLEU!

      Hélas, je ne suis qu'un très modeste débutant.
      Mon problème est que je veux effectuer la même action pour environ 600 ligne.
      Ma question est: est-il possible d'effectuer cette action en déterminant un début (ligne 3 ) et une fin ( ligne 600) pour éviter le problème de serpent qui se mord la queue?
      1. Bonjour,

        Oui! bien sur, c'est possible.

        Sub copiertout()
        Dim i As Integer ' variable pour l'incrément
        Range("c3").Select ' simplement pour montrer où ça commence

        'De la ligne 3 à 600
        For i = 3 To 600
        Cells(i, 3).Select ' C3 à C600
        If Selection <> (" ") Then ' J'ai repris ton test mais attention un espace ne se voit pas facilement
        Cells(i, 3).Offset(0, 6).Select 'on selectionne 6 colonnes à droite : offset =décalage ' change le 6 si ce n'est pas OK
        Selection.Copy
        Cells(i, 3).Offset(0, 11).Select ' on colle 5 colonnes plus loin à droite ' Idem pour le 11
        Selection.PasteSpecial xlPasteValues

        'inutile de revenir
        End If
        next i ' à la ligne 600 on quitte

        End Sub
        1. Ca marche!!

          Super!

          Merci beaucoup, tu m'as apporté la solution que je cherchais désespérément, et en plus, je viens d'apprendre quelque chose de nouveau qui va me servir pour plein d'autres applications.

          Vraiment MERCI !!
          1. Bon je te corrige mais... ce n'est pas clair.
            si ta procedure est juste.
            la syntaxe c'est ça.

            Sub conso()
            '
            ' conso Macro

            For i = 22 To 90
            Rows(i).Select
            Selection.Insert Shift:=xlDown
            Range("H" & i).Select
            ActiveCell.FormulaR1C1 = "=R" & i & "C7*R[-1]C"
            Range("H" & i).Select
            Selection.AutoFill Destination:=Range("H" & i & ":J" & i), Type:=xlFillDefault
            Range("H" & i & ":J" & i).Select
            Selection.NumberFormat = "0"
            Next i
            End Sub

            Dis-moi si c'est ce que tu veux.
            A+