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 :

Erreur 400 après lancement Macro VBA Excel


Sujet :

Macros et VBA Excel

  1. #21
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns("H:H").EntireColumn.Insert
    mais dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns(8).EntireColumn.Insert
    suffit
    T'as encore mal lu les explications de Jacques-Jean

  2. #22
    Nouveau membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Bonjour ouskel'n'or,

    Je viens de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns("H:H").EntireColumn.Insert
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Columns(8).EntireColumn.Insert
    .

    J'ai de nouveau une erreur 400, à l'éxécution de la macro ThisWorkbook.cro

    Bien cordialement.

  3. #23
    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
    Comme chez mois ça fonctionne avec ou sans filtre, n'aurais-tu pas une protection sur ta feuille ? Des colonnes masquées ? La feuille existe bien ?

    Edit
    Je viens de tester avec la colonne H masqué et le code fonctionne malgré tout
    Je ne vois pas ce que je peux tester d'autre
    C'est de ton côté que ça se passe...

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

    Déjà dans le fichier que vous venez de joindre vous aviez indiqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If PAA_mention <> 8 Then
            Columns(c.Column).Select
            Selection.Cut
            Columns("H.H").EntireColumn.Insert
            Selection.Insert Shift:=xlToRight
            End If
    donc ("H.H") au lieu de ("H:H")

    je sais, vous venez de remplacer par (8) donc cela n'a plus d'importance mais je vous le signale car ce type d'erreur de frappe peut bien évidemment se produire ailleurs et on ne pourra pas toujours tester toutes vos macros à chacune de vos modifications.

    Cela dit je regarde pour l'erreur dans la procédure "cro" car il me semble que j'avais déjà donné une modification à ce sujet.

  5. #25
    Nouveau membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Je suis vraiment désolé ouskel'n'or, mais lorsqu'à partir de la feuille 1-Choix je sélectionne le bouton "Plannings CRO", j'ai toujours une erreur 400 ...

    (Pas de protection, de colonne masquée, ...)

    En PJ, mon fichier.

    Je crois que je suis vraiment une quiche

    Bien cordialement

  6. #26
    Invité
    Invité(e)
    Par défaut
    Désolé Ouskel'n'or, j'ai le même problème avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns(8).EntireColumn.Insert
    si le filtre automatique est activé : "erreur 400".
    Mais de plus, ensuite, j'ai la même erreur sur une feuille sans filtre automatique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CRO_gare = c.Column
    Range(Cells(1, CRO_gare), Cells(gares_derlig, CRO_gare)).Select
    Selection.Copy
    'ici : erreur 400
    Columns(8).EntireColumn.Insert
    et en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CRO_gare = c.Column
    Columns(8).EntireColumn.Insert
    Range(Cells(1, CRO_gare), Cells(gares_derlig, CRO_gare)).Copy    Range(Cells(1, 8), Cells(gares_derlig, 8))
    pas d'erreur.

    Est-ce un problème de version d'Excel (Excel 2000) ?

    Ananar, une question que je me pose (en dehors de ces erreurs) :

    est-ce qu'il y a un ordre à respecter dans le lancement de vos procédures ou est-ce que l'on peut lancer "cro" sans avoir lancé par exemple "all" ?
    Dernière modification par AlainTech ; 25/08/2008 à 12h14. Motif: Suppression balises [code] en double

  7. #27
    Invité
    Invité(e)
    Par défaut
    J'ai continué à prendre un peu connaissance de votre code, mais à ce stade je ne peux plus rien faire s'il n'est pas possible d'ajouter une colonne lorsqu'un filtre automatique est activé (et j'avoue que je n'y parviens pas).

    Exemple :

    Dans la procédure "vérif" vous testez sur la feuille "2-PAAs" si le filtre automatique est activé et vous l'activez s'il ne l'est pas en définissant la colonne filtrée = 12 (titre = "Statut") et le texte = "Confirmé".

    Les 919 lignes de données contiennent toutes ce texte, est-ce que cela peut être parfois différent sinon pourquoi définir ce paramètre ?

    Si ça peut être différent il faut définir la colonne à filtrer par une variable après avoir recherché le titre car dans le traitement suivant on ajoute au moins une colonne (dans la procédure "cro") et si l'on doit supprimer le filtre pour insérer cette colonne puis le remettre ensuite, le N° de colonne ne sera plus le même.

    La preuve est que dans le dernier fichier que vous avez joint la colonne "Statut" n'est plus la 12 mais la 13.

    Et ce n'est qu'un exemple.

    Donc, tester les 11 procédures et les quelques 850 lignes de code, sachant qu'une feuille comprend 57 champs et l'autre 67 et que sur chacune il y a des ajouts et des suppressions de colonnes, me paraît un peu rébarbatif.

  8. #28
    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
    J'ai la même erreur avec la copy intercalée mais pourquoi ne pas inverser les lignes ? Là je n'ai plus d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Columns(8).EntireColumn.Insert
    CRO_gare = c.Column
    Range(Cells(1, CRO_gare), Cells(gares_derlig, CRO_gare)).Copy
    La sélection n'est pas nécessaire
    Eviter les Select qui alourdissent inutilement le code et provoquent des mvts de feuilles.

  9. #29
    Invité
    Invité(e)
    Par défaut
    Pour ce cas je n'ai plus de problème.

    Je ne l'ai pas fait exactement comme vous mais cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CRO_gare = c.Column
    Columns(8).EntireColumn.Insert
    Range(Cells(1, CRO_gare), Cells(gares_derlig, CRO_gare)).Copy _
    Range(Cells(1, 8), Cells(gares_derlig, 8))
    C'est au niveau des lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sheets("2-PAAs").Select
        If ActiveSheet.AutoFilterMode Then Selection.AutoFilter
        Columns(8).EntireColumn.Insert
    si je ne désactive pas le filtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns(8).EntireColumn.Insert
    provoque l'erreur 400 et comme je le précise dans ma dernière réponse désactiver le filtre ne pose pas de problème, mais le réactiver avec quels paramètres ?

    Sur la feuille concernée, il y a activation du filtre avec des paramètres différents suivant la procédure et de plus il faut tenir compte des colonnes ajoutées ou supprimées.

    Il y a 5 boutons mais 11 procédures donc selon la procédure lancée d'autres sont appelées mais pas obligatoirement les mêmes.

    C'est la question que j'ai posée : y a-t-il on ordre à respecter ou est-ce que l'on peut cliquer sur n'importe quel bouton sans que le traitement ne vienne provoquer des problèmes sur un autre traitement ?

  10. #30
    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
    Oui, mais si on se sélectionne pas la feuille, même si j'impose le filtre, ça fonctionne. Sur feuille non filtrée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not Sheets("Feuil1").AutoFilterMode Then Worksheets("Feuil1").Cells.AutoFilter
        Columns(8).EntireColumn.Insert
    Sur feuille filtrée préalablement par code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Worksheets("Feuil1").Cells.AutoFilter 'je place le filtre sur toutes les colonnes
        Columns(8).EntireColumn.Insert
    Outre mes préventions précédentes contre la sélection, la sélection nuit également au code...
    (Je le découvre pour l'insert de colonnes et je pense qu'il doit en être de même pour les lignes)
    Et comme je ne sélectionne jamais sauf exception indispensable, je n'avais jamais pu le remarquer...

  11. #31
    Invité
    Invité(e)
    Par défaut
    Ok, on replace le code dans son contexte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Sheets("3-Gares").Range("A1:AU1")
          Set c = .Find("CRO")
          End With
        CRO_gare = c.Column
        Columns(8).EntireColumn.Insert
        Range(Cells(1, CRO_gare), Cells(gares_derlig, CRO_gare)).Copy Range(Cells(1, 8), Cells(gares_derlig, 8))
    Ici c'est la feuille "3-Gares" qui est active

    en-dessous je place vos 2 lignes de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("2-PAAs").Cells.AutoFilter 'je place le filtre sur toutes les colonnes
    Columns(8).EntireColumn.Insert
    1) je n'ai pas l'erreur 400 mais la colonne est insérée sur la feuille "3-Gares" (pour laquelle le filtre automatique n'est pas activé) et non la "2-PAAs".

    2) Le problème n'est pas d'activer un filtre automatique sur toutes les colonnes mais de l'activer avec des paramètres, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not ActiveSheet.AutoFilterMode Then Selection.AutoFilter
        Selection.AutoFilter Field:=12, Criteria1:="Confirmé"
    où en l'occurrence la colonne n'est plus 12 mais 13, dans ce cas mais dans un autre ?

    Et je ne dis surtout pas que le cas n'a pas de solution, je précise seulement qu'il faut se plonger totalement dans l'étude de ce code, dans l'enchaînement des procédures pour être sûr de ce que l'on fait.

    Et pourtant 850 lignes de code ce n'est pas la mer à boire, j'en ai fait qui font 50 fois plus mais je les avais écrites, ce qui n'est pas le cas ici.

  12. #32
    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
    Hello Jacques-Jean, je ne polémique pas, j'ai simplement vu les difficultés d'Ananar à insérer une colonne.
    Je ne désirais pas m'impliquer autrement dans cette discussion.

    D'ailleurs, si je commence, je rencontre déjà des incohérences dans les premières lignes.
    With Sheets("3 - Gares").Range("A1:AU1")
    .......Set c = .Find("CRO")
    End With
    A quoi sert cette recherche ?
    si "CRO" est trouvé, si "CRO" n'est pas trouvé ?

    Et ici : où est le paste ?
    Range(Cells(1, CRO_gare), Cells(gares_derlig, CRO_gare)).Select
    Selection.Copy
    Sans parler des "Select"

    Et je ne souhaite pas aller plus loin.

    Je conseillerais tout de même à Ananar de refaire son analyse.

    Je vous souhaite une bonne nuit à tous les deux.

  13. #33
    Nouveau membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Bonjour ouskel'n'or et jacques_jean,

    Voici quelques précisions sur l'utilisation de ce fichier .xls :

    - Je travaille dans un centre d'appels qui réserve des prestations d'accueil en gare pour des personnes handicapées.

    - Dans le fonctionnement normal, les prestations sont réservées tous les jours, sur une appli , et envoyées toutes les nuits via un batch dans une appli destinée aux gares.

    - Par contre, il peut y avoir des dysfonctionnements techniques, sur une des ces appli.

    - Ce fichier .xls, permet pour chaque type de dysfonctionnement, de réduire les impacts. La macro générera les fichiers excel à envoyer par mail et fax pour chacune des gares (enregistrés au même endroit que la macro). Ces documents seront ensuite à envoyer manuellement.

    - S'il y a un KO dans un des jobs du Batch, nous réalisons à partir de notre appli un export au format .csv, que nous collons dans les feuilles 2-PAAs et 3-Gares. Je précise que l'ordre et l'intitulé de ces exports est toujours le même.

    - Il n'y a pas d'ordre à respecter dans la procédure, on peut donc cliquer sur n'importe quel bouton (en fonction des KO).

    En tout cas, encore pour votre collaboration depuis 5 jours.

    Bien cordialement.

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

    Ouskel'n'or : je ne voulais surtout pas polémiquer, je répondais simplement
    à votre proposition pour ces 2 lignes de code et j'en profite pour vous dire que j'ai fait une erreur, et oui cela m'arrive aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("2-PAAs").Columns(8).EntireColumn.Insert
    fonctionne très bien en désactivant le filtre ce qui comme vous le dîtes évite bien sûr les "Select".

    Ananar : je veux bien continuer pour solutionner ce problème d'ajout de colonnes qui ne se pose plus que dans un cas mais il me faut une précision :

    dans votre fichier d'origine, avant tout traitement quel qu'il soit est-ce que dernière colonne de la feuille "2-PAAs" est bien "BP" et la colonne "Statut" se trouve bien en "L".

    Je pose cette question simplement parce que ce n'est pas le cas dans le dernier fichier que vous avez joint.

    Cela dit, je ne modifierai rien d'autre dans le code car comme le dit Ouskel'n'or il faudrait refaire l'analyse et on ne fait pas l'analyse à partir d'un programme, c'est l'inverse qui se fait.

  15. #35
    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
    Ananar,
    J'ai bien voulu te venir en aide mais celà m'est impossible.
    Des exemples d'incohérences ? Presque à chaque ligne :

    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
        Worksheets.Add
        ActiveSheet.Name = "temp2CRO"
        ActiveSheet.Paste
    'Jusque là, les trois lignes du dessus, ok
     
    'Mais là : tu sélectionnes une plage. Pour en faire quoi ?
        temp2_derlig = Cells(65536, 1).End(xlUp).Row
        Range(Cells(2, 1), Cells(temp2_derlig, 1)).Select
     
    'Et là : Ces quatre lignes qui arrivent "ici" comme un cheveu dans la soupe
        che = Application.ActiveWorkbook.Path
            cheminCRO = che & "\CRO"
            ChDir che
            If Dir(cheminCRO, vbDirectory) = "" Then MkDir "CRO"
     
    'Et ici, tu parcours une plage dans une feuille (ici tu es dans "temp2CRO")
    'et la ligne d'après, tu sélectionnes une autre feuille
    For Each cell In Selection 'Cell est à déclarer as Range
     
    Sheets("2 - PAAs").Select
    Rows(1).Select
     
    'et ici, tu mets comme critère la cellule dans laquelle tu te trouves
    Selection.AutoFilter Field:=8, Criteria1:=cell
     
    'Et ici, "tu as posé un filtre (!)" et tu sélectionnes une plage sans en tenir compte
    Range(Cells(2, 1), Cells(PAA_derlig, 7)).Select
     
    'ETC.
    Sans parler des simplifications multiples, ton code...
    Bref, à ta place, j'écrirais la procédure que tu veux réaliser en français (non en code qui visiblement n'est pas ton point fort) et une fois refaite ton analyse, vus tes effort pour écrire ta procédure, nous pourrons toujours t'aider.
    Un conseil :
    Stucture tes procédures, pour chaque traitement ajoute un commentaire "là je fais ci, ici je fais çà..." Tu pourras ainsi relire ton code plus facilement et ça nous aidera à t'aider.
    Ensuite, simplifie ton code en supprimant les select. Un simple exemple :
    Ici tu mets
    Range(Cells(2, 1), Cells(PAA_derlig, 7)).Select
    Selection.Copy
    Sheets("forme").Select
    Cells(2, 1).Select
    ActiveSheet.Paste
    Tu pourrais écrire cela ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("2 - PAAs").Range(Cells(2, 1), Cells(PAA_derlig, 7)).Copy _
         Sheets("forme").Cells(2, 1)
    Même le "Paste" n'est plus nécessaire. C'est plus court, ça ne provoque pas de mouvement de feuille et surtout ça n'implique pas une sélection d'une feuille alors que tu parcours les cellules d'une autre...

    Bon courage

  16. #36
    Nouveau membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Pour jacques jean :

    Avant tout traitement quel qu'il soit, la dernière colonne de la feuille "2-PAAs" est "AU" et la colonne "Statut" se trouve en "AK".

    Pour jacques jean et ouskel'n'or :

    Merci à tous les deux pour votre patience et votre partage.

    Néanmoins, je vais suivre vos conseils et refaire l'analyse de mon projet, en écrivant la procédure en français.
    Je reviendrai vers vous ensuite.

    Bien à vous.

  17. #37
    Invité
    Invité(e)
    Par défaut
    Je crois qu'en effet il faut revoir votre code :

    Sur le 1er fichier que vous avez joint la dernière colonne de la feuille "2-PAAs" est bien "AU" mais la colonne "Statut" est "L" et non pas "AK".

    Sur le 2ème, comme je vous l'ai indiqué les colonnes ne sont plus les mêmes et je viens de m'apercevoir que c'est la même chose pour la feuille "3-Gares".

    Mais aussi dans la procédure "cro" le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Range(Cells(1, CRO_gare), Cells(gares_derlig, CRO_gare)).Select
          Selection.Copy
        Columns(8).Select
        Selection.Insert Shift:=xlToRight
    J'ai adapté ce code pour que la copie fonctionne mais le fait que vous copiez dans une nouvelle colonne insérée le contenu d'une autre colonne de la même feuille, quel est le but de cette copie dans une même feuille dont 2 colonnes vont être affectées du même titre (ce qui peut sans doute poser un problème lors de la réactivation du filtre automatique) ?

    D'autre part vous n'avez aucune instruction d'enregistrement de votre fichier après le lancement d'une option du menu ce qui suppose que vous le faites manuellement, y compris lorsqu'une procédure a été interrompue
    suite à une erreur.

    Donc de nouvelles erreurs lors d'une nouvelle ouverture du fichier et d'un nouveau lancement d'une procédure.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Erreur pour remplir cellules après lancement macro chrono
    Par carrera56650 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 28/04/2015, 21h45
  2. [XL-2007] erreur macro vba excel 2007
    Par yan14 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 22/02/2012, 23h04
  3. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 10h00
  4. Auto install macro vba excel
    Par zootman dans le forum Installation, Déploiement et Sécurité
    Réponses: 6
    Dernier message: 14/06/2006, 21h30
  5. [VBA-E] macro VBA excel suppression graphiques
    Par totoza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/05/2006, 08h45

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