IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Pas de passage d'une macro à une autre dans un même module [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut Pas de passage d'une macro à une autre dans un même module


    Voici mon problème :

    J'ai le code ci-dessous qui ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Sub Dates()
        For j = 2 To 99999
            Cells(j, 10).NumberFormat = "m/d/yyyy"
            Cells(j, 11).NumberFormat = "m/d/yyyy"
            Cells(j, 12).NumberFormat = "m/d/yyyy"
        Next j
        FormatDate
    End Sub
    Sub FormatDate()
     Application.ScreenUpdating = False
        For i = 1 To Range("A65535").End(xlUp).Row
            If Cells(i, 1) Like "##.##/####" Or Cells(i, 1) Like "##/##.####" Or Cells(i, 1) Like "##.##.####" Or Cells(i, 1) Like "##.##.##" Or Cells(i, 1) Like "##.##/##" Or Cells(i, 1) Like "##/##.##" Then
                Cells(i, 1).NumberFormat = "@": Cells(i, 1) = Replace(Cells(i, 1), ".", "/"): Cells(i, 1).NumberFormat = "m/d/yyyy"
            End If
        Next i
          RemplacePresse
     Application.ScreenUpdating = True
    End Sub
    Sub RemplacePresse()
    On Error Resume Next
      Columns("B:B").Replace What:="presse", Replacement:="", LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
      ReplaceFormat:=False
      On Error GoTo 0
        RemplaceText1
    End Sub
    Sub RemplaceText1()
    On Error Resume Next
      Columns("B:B").Replace What:="à chambre fixe", Replacement:="", LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
      ReplaceFormat:=False
      On Error GoTo 0
        RemplaceText2
    End Sub
    Sub RemplaceText2()
    On Error Resume Next
      Columns("B:B").Replace What:="HAUTE DENSITE", Replacement:="", LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
      ReplaceFormat:=False
      On Error GoTo 0
        RemplaceText3
    End Sub
    Sub RemplaceText3()
    On Error Resume Next
      Columns("B:B").Replace What:="Bale Pack", Replacement:="", LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
      ReplaceFormat:=False
      On Error GoTo 0
        RemplaceText4
    End Sub
    Sub RemplaceText4()
    On Error Resume Next
      Columns("B:B").Replace What:="HD", Replacement:="", LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
      ReplaceFormat:=False
      On Error GoTo 0
        SupEspace
    End Sub
    Sub SupEspace()
    'Dim i As Long
       For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
           Cells(i, 2) = Trim(WS.Cells(i, 2))
       Next i
        InterLigne
    End Sub
    Sub SupInterLigne()
        For i = 2 To Range("A60000").End(xlUp).Row
            If Range("A" & i).Value = "" Then
               Rows(i).Delete
            End If
        Next i
    End Sub

    J'ai la première partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Dates()
        For j = 2 To 99999
            Cells(j, 10).NumberFormat = "m/d/yyyy"
            Cells(j, 11).NumberFormat = "m/d/yyyy"
            Cells(j, 12).NumberFormat = "m/d/yyyy"
        Next j
        FormatDate
    End Sub
    Qui a l'ai de marcher mais sa passe pas à la suite

    Une idée

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Je n'ai pas regarder la suite mais pour la premiere partie, tu peux éviter la boucle avec la méthode ci dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Dates()
     
        Range("J2:L9999").NumberFormat = "m/d/yyyy"
     
        FormatDate
     
    End Sub

  3. #3
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Bien vu mais malheureusement, sa ne résous pas le problème

    Mais je me pose la question si c'est un problème de passage d'une partie du module a une autre ou alors si c'est une partie qui ne fonctionne pas ?

  4. #4
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    Bonjour, je viens de tester chez moi en plaçant ton code dans un module et je n'ai eu aucun problème.
    As tu essayé de dérouler en pas à pas pour voir ce qu'il se passe?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je n'ai peut-être pas tout compris, mais dans cette procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub SupEspace()
    'Dim i As Long
       For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
           Cells(i, 2) = Trim(WS.Cells(i, 2))
       Next i
        InterLigne
    End Sub
    On trouve un appel vers la procédure "Interligne()" qui à priori n'existe pas, par contre il existe une procédure "SupInterLigne()" ?

  6. #6
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Oui excuse j'ai modifié mais sa marche toujours pas

  7. #7
    Invité
    Invité(e)
    Par défaut
    Si je lance votre procédure "Sub Dates()" sur une feuille vide et après avoir rectifié le nom "SupInterLigne" comme indiqué dans la réponse précédente, les procédures se lancent bien les unes après les autres et je n'ai aucun message d'erreur.

    Mais ce n'est pas une preuve. Il faudrait un exemple de votre fichier, car il suffit d'une donnée non conforme, par exemple.

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Déjà, pour trouver d'éventuelles erreurs, mets tous les "On error resume next" en remarque.
    Ensuite tu peux simplifier le code obtenu en enregistrant ton action. Tous les paramètres par défaut peuvent être supprimés. Après on y voit plus clair
    Par exemple, dans la procédure RemplacePresse, tu peux limiter l'instruction à ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns("B:B").Replace What:="à chambre fixe", Replacement:="", LookAt:=xlPart
    Même remarque pour RemplaceText1 et 2
    Mais je ne vois toujours pas la raison de l'erreur... et comme tu ne devrais pas en avoir, "On error resume next" ne servirait à rien, donc, commence par là et mets-les tous en remarque. VBA va t'expliquer ton problème
    Bonne journée

  9. #9
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Mais je ne vois toujours pas la raison de l'erreur... et comme tu ne devrais pas en avoir, "On error resume next" ne servirait à rien, donc, commence par là et mets-les tous en remarque. VBA va t'expliquer ton problème
    J'avais essayé mais sans succé.

    J'ai séparer les macro en les mettant dans des modules différent et j'ai rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns("A:A").NumberFormat = "mm/dd/yyyy"
    aprés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub FormatDate()
     Application.ScreenUpdating = False
     For i = 1 To Range("A65535").End(xlUp).Row
     If Cells(i, 1) Like "##.##/####" Or Cells(i, 1) Like "##/##.####" Or Cells(i, 1) Like "##.##.####" Or Cells(i, 1) Like "##.##.##" Or Cells(i, 1) Like "##.##/##" Or Cells(i, 1) Like "##/##.##" Then
     Cells(i, 1).NumberFormat = "@": Cells(i, 1) = Replace(Cells(i, 1), ".", "/"): Cells(i, 1).NumberFormat = "mm/dd/yyyy"
     End If: Next i
    qui (je pense ne sert a rien) mais maintenant sa a l'air de marcher




    A préciser que dans la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub FormatDate()
     Application.ScreenUpdating = False
     For i = 1 To Range("A65535").End(xlUp).Row
     If Cells(i, 1) Like "##.##/####" Or Cells(i, 1) Like "##/##.####" Or Cells(i, 1) Like "##.##.####" Or Cells(i, 1) Like "##.##.##" Or Cells(i, 1) Like "##.##/##" Or Cells(i, 1) Like "##/##.##" Then
     Cells(i, 1).NumberFormat = "@": Cells(i, 1) = Replace(Cells(i, 1), ".", "/"): Cells(i, 1).NumberFormat = "mm/dd/yyyy"
     End If: Next i
             RemplacePresse
     Application.ScreenUpdating = True
     End Sub
    j'ai inversé les lignes suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Application.ScreenUpdating = True
    etcar sa appelait la macro suivante sans arrivé jusqu'a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    Le problème pouvait il venir de là ??




    PS - je ne met pas encore en attendant une éventuelle réponse à ma dernière question (Toutefois je n'en ai pas je le mettrais)

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Que s'est-il passé quand tu as supprimé les On error... ?
    Épi un truc que j'avais pas vu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        For j = 2 To 99999
            Cells(j, 10).NumberFormat = "m/d/yyyy"
            Cells(j, 11).NumberFormat = "m/d/yyyy"
            Cells(j, 12).NumberFormat = "m/d/yyyy"
        Next j
    J'ai un trou... y'a combien de lignes dans une feuille de calculs de 2003 ? Tu devrais déjà corriger ça.
    Quant à "Application.ScreenUpdating = True" je le mettrais dans Dates, après FormatDate puisque ce sera la dernière procédure "visitée" par VBA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Dates()
        For truc to machin
            ...
        Next  
        FormatDate
        Application.ScreenUpdating = True
    End Sub
    Mais réponds à ma question
    A+

  11. #11
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Que s'est-il passé quand tu as supprimé les On error... ?
    Rien de plus rien de moins


    Citation Envoyé par ouskel'n'or Voir le message
    J'ai un trou... y'a combien de lignes dans une feuille de calculs de 2003 ?
    65536 lignes
    Je ai modifier. c'est bon

    Citation Envoyé par ouskel'n'or Voir le message
    Quant à "Application.ScreenUpdating = True" je le mettrais dans Dates, après FormatDate puisque ce sera la dernière procédure "visitée" par VBA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Dates()
        For truc to machin
            ...
        Next  
        FormatDate
        Application.ScreenUpdating = True
    End Sub
    En fait sa change quoi ??

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par FCL31
    En fait sa change quoi ??
    Rien, c'est pour le principe. Tu souhaites éviter les mouvements de feuilles gourmands en temps d'exécution ? Alors tu commences la macro "maître" en supprimant la mise à jour de l'affichage et en la rétablissant quand tout est fini. Et c'est plus facile de savoir où tu as mis tout ça si tu les mets "là", "là" qui, pour ce qui te concerne, est la macro "Dates"
    Mais tu fais bien comme tu veux selon tes envies et ton humeur du moment
    Bon week-end

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] passage de variables d'une page à une autre
    Par programos dans le forum Langage
    Réponses: 9
    Dernier message: 13/03/2007, 18h31
  2. passage des variables d'une classe à une autre
    Par zibou7 dans le forum Langage
    Réponses: 4
    Dernier message: 19/02/2007, 16h46
  3. Réponses: 6
    Dernier message: 29/09/2006, 10h18
  4. Passage de paramètre d'une classe à une autre
    Par semenzato dans le forum C++
    Réponses: 3
    Dernier message: 21/09/2005, 13h59
  5. [C#] Passage de valeur d'une fenêtre à une autre
    Par groum999 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/09/2004, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo