L'indice n'appartient pas à la sélection

Bonjour à toutes et à tous,

J'ai un souci qui s'est présenté à moi depuis que mes fichiers ont migré sur un autre serveur ; ma macro ne fonctionne plus.

J'ai pourtant bien fait attention à modifier le chemin d'accès puisque ce dernier a changé.

J'ai désormais l'erreur 9 qui s'affiche "L'indice n'appartient pas à la sélection".

Je précise que cette macro vise à ouvrir chaque fichier présent dans le dossier dit "POP NEW" et de changer le format de plusieurs plages de données sélectionnées. Cette macro se trouve sur un fichier à part.

Or, désormais, il me surligne Sheets("POP").Range("E58:AE64").NumberFormat = "General"

_____________________________________

Sub un()
With ThisWorkbook
Set WbkS = ActiveWorkbook
End With
Sheets("POP").Range("E58:AE64").NumberFormat = "General"
Sheets("POP").Range("E58:AE64").Select
Selection.FormulaR1C1Local = Selection.FormulaR1C1Local
Call deux
End Sub

Sub deux()
Sheets("POP").Range("E32:AE48").NumberFormat = "General"
Sheets("POP").Range("E32:AE48").Select
Selection.FormulaR1C1Local = Selection.FormulaR1C1Local
Selection.NumberFormat = "0.00"
Selection.HorizontalAlignment = xlCenter
ActiveWorkbook.Save
End Sub
Sub ouvrirfichiers()
Dim Fichier As String, Chemin As String
Dim Wb As Workbook
Chemin = "M:\Administratif\12-NOM Prénom\9_POP\POP NEW\"
Fichier = Dir(Chemin & "*.xlsx")
Do While Fichier <> ""
Set Wb = Workbooks.Open(Chemin & Fichier)
Wb.Sheets("POP").Range("E58:AE72").NumberFormat = "General"
Wb.Sheets("POP").Range("E58:AE72").Select
Selection.FormulaR1C1Local = Selection.FormulaR1C1Local
Call deux2
Wb.Close True
Set Wb = Nothing
Fichier = Dir
Loop
End Sub

Sub deux2()
Sheets("POP").Range("E32:AE72").NumberFormat = "General"
Sheets("POP").Range("E32:AE48").Select
Selection.FormulaR1C1Local = Selection.FormulaR1C1Local
Selection.NumberFormat = "0.00"
Selection.HorizontalAlignment = xlCenter
Range("E66:AC72").Select
Selection.Copy
Range("E66").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWorkbook.Save
End Sub

______________________________________________________________________________

Les fichiers qui doivent être modifiés suite à cette macro :

image

L'onglet à modifier dans chaque fichier "POP" :

image

Pouvez-vous voir d'où vient le problème s'il vous plaît ?

Je vous remercie d'avance.

Cordialement,

Drokarre

Bonjour

ma macro ne fonctionne plus.

laquelle, vous en avez 4 ici ? la UN je suppose au vu du soulignement
Si vous avez migré sur un autre serveur, vous ne devriez modifier que le Chemin dans le code Ouvrirfichiers

Et avec votre code UN comme ceci

Sub un()
Dim Wbks As Workbook

Set Wbks = ActiveWorkbook
With Wbks.Sheets("POP").Range("E58:AE64")
    .NumberFormat = "General"
    .FormulaR1C1Local = .FormulaR1C1Local
End With
Call deux
End Sub

Crdlt

Bonjour Dan,

Tout d'abord merci pour ta proposition.

Cela bloque sur la macro UN et même après la modification :
image

Pourtant, la plage est bien existante dans le fichier E58:AE64

C'est censé changer le format qui est actuellement en texte en standard pour que la formule s'exécute.

image

Cdlt

Bonjour à tous,

...

Cette macro se trouve sur un fichier à part.

Est ce que ce fichier possède une feuille nommée "POP" ?

l'erreur 9 intervient souvent pour un défaut de feuille à laquelle on fait référence.

A+

Bonjour à tous,

Je rajoute un complément au message d'AlgoPlus qui est également mon hypothèse : n'y a-t-il pas un espace invisible dans le nom de la feuille POP sur votre classeur ?
Si vous remplacez Sheets("POP") par ActiveSheet et que vous exécutez le code depuis la feuille POP, que se passe-t-il ?

Cdlt,

Re

Vérifier que votre feuille est bien nommée POP en majuscules et sans espace avant ou après le nom POP

Elle doit être aussi déprotégée

AlgoPlus & Dan

J'ai vérifié s'il n'y avait pas d'espace avant ou après "POP" sur l'onglet de la feuille, et il n'y en a pas :

image

J'ai également vérifié si l'onglet était protégé et ce n'est pas le cas.

Ergotamine

J'ai changé "Sheets" par ActiveSheet en essayant d'activer la Macro directement via la feuille "POP", et cela a décalé le souci :

image

En revanche, via la fiche où je lance la macro, cela modifie bien les formats. Mais pour le coup pas sur les 60 fichiers où je veux que ça se fasse.

C'était censé se lancer tout seul puis tout changer, en ouvrant fichier par fichier, en une à deux minutes.

Je ne comprends pas comment cela peut ne plus fonctionner puisque les fichiers n'ont pas bougé d'un pouce et la macro non plus... Seule la destination a changé à cause de la migration.

Bonjour,

Ce sont des tests que j'essaie de vous faire faire pour éliminer des hypothèses.

Donc si on met ActiveSheet et que ça décale le problème le soucis ne se trouve pas sur l'objet Range mais alors soit sur la feuille, soit le classeur.

J'ai donc un doute sur la variable Wbks si on a retiré les pistes feuille. En effet vous le définissez comme ActiveWorkbook, mais dans le classeur actif lors de l’exécution de la macro avez-vous la feuille POP ? Ce classeur devrait être celui à partir duquel la macro est lancée car vous n'ouvrez aucun autre classeur dans le code affiché.

Cdlt,

Edit : Dans ActiveWorkbook on a le lien complet dans sa propriété Path. Le soucis c'est que j'ai du mal à me représenter comment est construite votre architecture, si votre code se trouve dans un classeur à transformer présent dans le répertoire de tous les classeurs à transformer, s'il se situe dans un répertoire annexe et va ouvrir chaque fichier pour le transformer, etc ...

image

J'ai copié/déplacé l'onglet contenant la macro dans l'un des fichiers "POP".

J'ai retenté l'expérience et j'ai l'erreur d'exécution "1004".

Puis en cliquant sur débogage (ps: j'ai remis Sheets("POP") sinon cela appliquait la macro sur la Feuil1 => ActiveSheet) :

image

En revanche, via la fiche où je lance la macro, cela modifie bien les formats.

Quelle fiche ? Elle est dans quel fichier ?

Pour vos 60 fichiers je suppose que le processus est le suivant :

1. Macro Ouvrir fichier
2. Macro call Deux2

Comment ou plutôt quand déclenchez-vous la macro UN ?
Pourquoi cette macro UN sachant que dans la macro Ouvrifichier, vous faites à peu près la même chose en couvrant la plage reprise dans la macro UN

Bonjour tout le monde !

Si j'ai bien compris la problématique, la première macro à être exécutée devrait être ouvrirfichiers, et c'est celle ci qui devrait appeler la macro un. Sans ça, le fichier n'est pas ouvert, et si le classeur contenant le code ne contient pas de feuille nommée "POP", il y aura un soucis. Une possibilité pour éviter les erreurs de classeur, les passer en argument dans les appels de macro :

Sub ouvrirfichiers()

'...gnagnagna
Set Wb = Workbooks.Open(Chemin & Fichier)
'...gnagnagna
call un(Wb)
'...gnagnagna

End Sub

Sub un(Wbks As Workbook)

With Wbks.Sheets("POP").Range("E58:AE64")
    .NumberFormat = "General"
    .FormulaR1C1Local = .FormulaR1C1Local
End With
Call deux(Wbks)

End Sub

Plus simple encore : grouper tout ça dans une même macro.

Bonjour à tous,

C'est exactement ça Pedro22 que j'ai essayé d'expliquer, au moins ça me rassure je suis pas dans le faux total !

Par contre j'ai un doute pour la suite sur cette méthode :

.FormulaR1C1Local = .FormulaR1C1Local

A moins de passer à travers toutes mes cellules de façon unitaire, impossible de valider sur l'ensemble d'une plage une formule textuelle en formule validée .. Si quelqu'un a une méthode je suis preneur car je sèche .. J'ai essayé .value = .value mais impossible non plus .. D'où l'erreur 1004 pour le coup, j'ai l'impression qu'on ne peut valider une plage de formule d'un coup sans passer par une boucle.

Mais ça c'est un second problème !

Cdlt,

Salut Pedro22,

Ton idée vient peut être de ce que j'ai signalé dans mon post précédent mais si on relit la demande, le code ne fonctionne plus depuis la migration sur un autre serveur.

Je ne vois d'ailleurs pas pourquoi il a un souci avec le code que j'ai proposé vu que j'avais tout de même testé avant de poster

Je propose plutot d'attendre qu'il explique comment il fonctionne d'autant que les plages sur lesquelles il applique les différents codes ne sont pas identiques

Ergotamine, Dan, on gamberge à partir d'éléments incomplets...

Sauf erreur de ma part, la totalité des macros peuvent être résumées en une seule (à tester) :

Sub OuvrirFichiers()

Dim Fichier As String, Chemin As String, Wb As Workbook

Chemin = "M:\Administratif\12-NOM Prénom\9_POP\POP NEW\"
Fichier = Dir(Chemin & "*.xlsx")
Do While Fichier <> ""
    Set Wb = Workbooks.Open(Chemin & Fichier)
    With Wb.Sheets("POP")
        .Range("E58:AE72").NumberFormat = "General"
        .Range("E58:AE72").Formula = .Range("E58:AE72").Formula 'Quel intérêt d'affecter sa propre formule ?
        .Range("E32:AE48").NumberFormat = "0.00"
        .Range("E32:AE48").HorizontalAlignment = xlCenter
        .Range("E66:AC72") = "0.00"
        .Range("E66:AC72").HorizontalAlignment = xlCenter
        .Range("E66:AC72").Value = .Range("E66:AC72").Value 'Equivalent copié et collé valeurs
    End With
    Wb.Close True 'Fermer et sauvegarder
    Fichier = Dir 'Passer au fichier suivant
Loop

End Sub

Pedro22, cela je l'avais remarqué.

Faut comprendre pourquoi cela fonctionnait avant et plus maintenant. C'est cela le sujet.

Savoir comment il fonctionne. Peut être que les codes sont placés dans deux fichiers différents

Faut comprendre pourquoi cela fonctionnait avant et plus maintenant. C'est cela le sujet.

Savoir comment il fonctionne. Peut être que les codes sont placés dans deux fichiers différents

Tout à fait, mais est ce que c'est simplement le déplacement du fichier qui est en cause, ou des retouches hasardeuses sur le code ? Je pense que partir d'une base plus propre permettra peut être de comprendre plus facilement le fond du problème que tu évoques. Je n'ai pas pour ambition de te voler la vedette avec mes interventions, tu es certainement beaucoup plus compétent que moi pour intervenir !

Je n'ai pas pour ambition de te voler la vedette

lol !!!! mais je ne suis pas ici pour être une vedette

tu es certainement beaucoup plus compétent que moi pour intervenir !

çà, rien n'est sûr . Chacun a ses compétences à des degrés divers, c'est cela qui fait l'intérêt d'un forum.

Pour le fil, je serais bien curieux que Drokarre teste le code adapté tel que tu l'as proposé d'ailleurs....

lol !!!! mais je ne suis pas ici pour être une vedette

Trop tard ! Ce doit être le orange de la panthère rose...

Pedro22, bonne idée mais malheureusement j'ai testé et rien ne se passe. Bon, au moins, il n'y a pas de message d'erreur.

Je vais tenter de mieux expliquer la procédure.

La macro se trouve dans le fichier "MACRO" qui est sous l'extension xlsm et qui se situe dans le fichier "9_POP".

1. L'emplacement du fichier où se trouve la MACRO :

image

2. Dans le fichier "POP NEW" se trouvent les 61 fichiers sous l'extension xlsx qui doivent être modifiés grâce à la Macro, un par un :

image

3. Dans le fichier "MACRO", j'avais juste à cliquer sur le bouton 1 puis le processus s'enclenchait tout seul... Les 61 fichiers s'ouvraient un par un et la macro se chargeait de modifier le format des plages de cellules concernées. La macro assignée était "ouvrirfichiers".

image

4. Ensuite, j'ai pris l'un des 61 fichiers comme exemple, lorsque la macro s'exécutait correctement, les cellules étaient dans le bon format et les formules s'était bien exécutées également :

Avant la macro :

image

Après la macro :

image

Il faudrait contrôler ce que fait la macro en mode pas à pas (touche F8), pour vérifier :

1. Que le fichier s'ouvre bien
2. Que le formatage fonctionne
3. Que la suppression des formules pour ne garder que les valeurs fonctionne également
4. Que le fichier se ferme avec sauvegarde des modifications réalisées

Nous aurons du mal à le faire pour toi sans avoir de fichiers à manipuler pour réaliser des tests.

Rechercher des sujets similaires à "indice appartient pas selection"