Erreur d'execution 28

nico -  
Bidouilleu_R Messages postés 1209 Statut Membre -
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. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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.
    0
  2. nico
     
    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?
    0
  3. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
    0
  4. nico
     
    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 !!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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+
    0
  7. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    zut je me suis trompé de post!
    Ahhhh!
    0