mais dans ce casCode:Columns("H:H").EntireColumn.Insert
suffit ;)Code:Columns(8).EntireColumn.Insert
T'as encore mal lu les explications de Jacques-Jean :mouarf:
Version imprimable
mais dans ce casCode:Columns("H:H").EntireColumn.Insert
suffit ;)Code:Columns(8).EntireColumn.Insert
T'as encore mal lu les explications de Jacques-Jean :mouarf:
Bonjour ouskel'n'or,
Je viens de remplacerparCode:Columns("H:H").EntireColumn.Insert
.Code:Columns(8).EntireColumn.Insert
J'ai de nouveau une erreur 400, à l'éxécution de la macro ThisWorkbook.cro :cry:
Bien cordialement.
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 ? :cry:
Edit
Je viens de tester avec la colonne H masqué et le code fonctionne malgré tout :roll:
Je ne vois pas ce que je peux tester d'autre :(
C'est de ton côté que ça se passe...
Bonjour,
Déjà dans le fichier que vous venez de joindre vous aviez indiqué :
donc ("H.H") au lieu de ("H:H")Code:
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
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.
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 :oops:
Bien cordialement
Désolé Ouskel'n'or, j'ai le même problème avec :
si le filtre automatique est activé : "erreur 400".Code:Columns(8).EntireColumn.Insert
Mais de plus, ensuite, j'ai la même erreur sur une feuille sans filtre automatique :
et en mettant :Code:
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
pas d'erreur.Code:
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))
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" ?
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.
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
La sélection n'est pas nécessaireCode:
1
2
3 Columns(8).EntireColumn.Insert CRO_gare = c.Column Range(Cells(1, CRO_gare), Cells(gares_derlig, CRO_gare)).Copy
Eviter les Select qui alourdissent inutilement le code et provoquent des mvts de feuilles.
Pour ce cas je n'ai plus de problème.
Je ne l'ai pas fait exactement comme vous mais cela fonctionne :
C'est au niveau des lignes suivantes :Code:
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))
si je ne désactive pas le filtre :Code:
1
2
3
4 Sheets("2-PAAs").Select If ActiveSheet.AutoFilterMode Then Selection.AutoFilter 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 ?Code:Columns(8).EntireColumn.Insert
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 ?
Oui, mais si on se sélectionne pas la feuille, même si j'impose le filtre, ça fonctionne. Sur feuille non filtrée
Sur feuille filtrée préalablement par codeCode:
1
2 If Not Sheets("Feuil1").AutoFilterMode Then Worksheets("Feuil1").Cells.AutoFilter Columns(8).EntireColumn.Insert
Outre mes préventions précédentes contre la sélection, la sélection nuit également au code... :mouarf:Code:
1
2 Worksheets("Feuil1").Cells.AutoFilter 'je place le filtre sur toutes les colonnes Columns(8).EntireColumn.Insert
(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... :aie:
Ok, on replace le code dans son contexte :
Ici c'est la feuille "3-Gares" qui est activeCode:
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))
en-dessous je place vos 2 lignes de code :
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".Code:
1
2 Worksheets("2-PAAs").Cells.AutoFilter 'je place le filtre sur toutes les colonnes Columns(8).EntireColumn.Insert
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 :
où en l'occurrence la colonne n'est plus 12 mais 13, dans ce cas mais dans un autre ?Code:
1
2 If Not ActiveSheet.AutoFilterMode Then Selection.AutoFilter Selection.AutoFilter Field:=12, Criteria1:="Confirmé"
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.
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.
A quoi sert cette recherche ?Citation:
With Sheets("3 - Gares").Range("A1:AU1")
.......Set c = .Find("CRO")
End With
si "CRO" est trouvé, si "CRO" n'est pas trouvé ?
Et ici : où est le paste ?
Sans parler des "Select" ;)Citation:
Range(Cells(1, CRO_gare), Cells(gares_derlig, CRO_gare)).Select
Selection.Copy
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.
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 :merci: pour votre collaboration depuis 5 jours.
Bien cordialement.
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 :
fonctionne très bien en désactivant le filtre ce qui comme vous le dîtes évite bien sûr les "Select".Code:Sheets("2-PAAs").Columns(8).EntireColumn.Insert
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.
Ananar,
J'ai bien voulu te venir en aide mais celà m'est impossible.
Des exemples d'incohérences ? Presque à chaque ligne :
Sans parler des simplifications multiples, ton code...Code:
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.
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
Tu pourrais écrire cela ainsiCitation:
Range(Cells(2, 1), Cells(PAA_derlig, 7)).Select
Selection.Copy
Sheets("forme").Select
Cells(2, 1).Select
ActiveSheet.Paste
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...Code:
1
2 Sheets("2 - PAAs").Range(Cells(2, 1), Cells(PAA_derlig, 7)).Copy _ Sheets("forme").Cells(2, 1)
Bon courage
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.
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 :
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) ?Code:
1
2
3
4 Range(Cells(1, CRO_gare), Cells(gares_derlig, CRO_gare)).Select Selection.Copy Columns(8).Select Selection.Insert Shift:=xlToRight
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.