Erreur d'exécution 9 l'indice n'appartient pas à la sélectio

tvnbebeKIHN Messages postés 12 Date d'inscription mercredi 22 février 2023 Statut Membre Dernière intervention 2 mars 2023 - Modifié le 22 févr. 2023 à 22:25
 ravida_7062 - 23 mars 2023 à 10:43

Bonjour à toutes et à tous ,

je travaille chaque semaine avec un fichier Excel contenant des macros VB .

Jusqu'à la semaine dernière nous étions dans un environnement avec Excel 2010 et nous sommes passés à Office 365 .

Mon fichier de base et mes fichiers annexes sont sur des partages réseau qui n'ont pas changés .

Après une toute petite adaptation pour travailler en mode 64 bits (ajout de Ptrsafe aux déclarations) , mon fichier s'ouvre sans souci .

Je lance ensuite ma macro et j'obtiens l'erreur "Erreur d'exécution 9 , l'indice n'appartient pas à la sélection " .

Je clique sur débogage et  la ligne incréminée est sheets(nomFeuilleProjet).select (voir le bout de code ci dessous) :

ActiveWindow.WindowState = xlMinimized

    Windows(NomClasseurXls).Activate
    Sheets(NomFeuilleProjet).Select
    ChangeFilters NomFeuilleProjet
    
    Range(CalLetCol(1) & "4").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
    
    Windows(Fichier).Activate
    If exportligne = "N" Then
        Sheets(NomFeuilleProjet).Select
       Else
        Sheets("Temp").Select
    End If
    Range(CalLetCol(1) & "4").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    If (exportligne = "E") Or (exportligne = "M") Then
        Sheets("Temp").Select
        ActiveCell.SpecialCells(xlLastCell).Select
        k = Mid(ActiveCell.Address, InStr(2, ActiveCell.Address, "$") + 1)
'        j = 4
'        Do Until Cells(j, 1) = ""
        For j = 4 To k
            NbIndex = 0
            For i = 1 To nbCol
                If exportligne = "M" Then
                    If tabconfig(ligneTraite, i, 2) = "E" Then
                        If Not IsEmpty(tabOpt(i, 1)) Then
                            nomtab(i) = Cells(j, i)
                        End If
                    End If

Si une bonne âme pouvait m'aider , je serais aux anges , en sachant que je ne suis en aucun cas programmeur ;) !

Merci d'avance .

Bruno

PS : si vous avez besoin du code complet ou du fichier excel contenant les différents codes , n'hésitez pas .

22 réponses

vb95 Messages postés 3463 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 21 février 2024 168
22 févr. 2023 à 17:44

Bonjour

Bizarre qu'il y a 2 fois cette ligne de code : 

Sheets(NomFeuilleProjet).Select

Je pense que la première serait à supprimer .

un petit plus pour vos prochains posts : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code


0
Whismeril Messages postés 18961 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 février 2024 649
22 févr. 2023 à 17:46

Bonjour


pour poster ton code merci de faire comme décrit là https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

Quand ça plante, quel est le contenu de nomFeuilleProjet?

Cette feuille existe-t-elle dans le classeur?


0
tvnbebeKIHN Messages postés 12 Date d'inscription mercredi 22 février 2023 Statut Membre Dernière intervention 2 mars 2023
23 févr. 2023 à 08:45

Bonjour et merci pour vos réponses .

Désolé de ne pas avoir déposer les lignes de code de la bonne manière , je saurai pour la prochaine fois ;) !

@vb95 StatutContributeur : j'ai supprimé la 1ère ligne de code

Sheets(NomFeuilleProjet).Select

Mais le résultat reste le même ;( . 

@Whismeril StatutContributeur : Le contenu de nomFeuilleProjet est : "Projet" et cette feuille existe bel et bien dans le classeur .

Merci d'avance pour vos futures réflexions et à votre disposition pour vous aider .

Bruno

0
Whismeril Messages postés 18961 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 février 2024 649
23 févr. 2023 à 09:00

Merci de ne pas me citer avec @tvnbebeKIHN StatutMembre ça envoie un mail, or la discussion est déjà suivie, ça fait doublon.

Le contenu de nomFeuilleProjet est : "Projet" et cette feuille existe bel et bien dans le classeur .

On est d'accord que tu as espionné la variable au moment du crash?


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tvnbebeKIHN Messages postés 12 Date d'inscription mercredi 22 février 2023 Statut Membre Dernière intervention 2 mars 2023
23 févr. 2023 à 10:21

OK pour la citation , désolé ;) .

Pour la variable , au moment du crash , je clique sur le bouton débogage du message d'erreur, ce qui m'ouvre le code en m'indiquant en jaune la ligne incriminée .

En passant ma souris dessus j'obtiens "projet" comme contenu . 

Si ce n'est pas la bonne manière d'obtenir l'info souhaité , merci de me dire comment faire , car c'est la seule façon que je connaisse ; )

Merci

0
vb95 Messages postés 3463 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 21 février 2024 168
23 févr. 2023 à 11:01

Bonjour

La ligne qui cause l'erreur : c'est la 4 ou c'est la 13 ( voir le premier message ) ?


0
tvnbebeKIHN Messages postés 12 Date d'inscription mercredi 22 février 2023 Statut Membre Dernière intervention 2 mars 2023
23 févr. 2023 à 11:12

C'est la 13 qui est pointée en jaune lors du débogage .

Merci

0
Whismeril Messages postés 18961 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 février 2024 649
23 févr. 2023 à 12:18

C'est la bonne méthode.

A la ligne tu actives un autre fichier, que celui qui est activé en ligne 3.

Dans ce fichier, y a t il la feuille "projet"?

Attention, c'est peut-être sensible à la casse (y'a longtemps que je n'ai pas fait de vba).

Une fois tu écris "Projet", une autre "projet" et du coup ce serait 2 noms différents.


0
tvnbebeKIHN Messages postés 12 Date d'inscription mercredi 22 février 2023 Statut Membre Dernière intervention 2 mars 2023
23 févr. 2023 à 13:56

Effectivement , un fichier d'archive est créé à partir de celui où je lance la macro .

Les 2 fichiers (origine et destination) ont une feuille nommée à l'identique "Projet" (avec "P" en majuscule) .

Et le contenu de la variable qui semble poser problème est bien également identique "Projet" .

Par acquis de conscience j'ai vérifié s'il n'y avait pas un blanc qui trainait de ci de là , mais rien non plus . 

Je me permet de répéter au cas où , que cette macro fonctionne toujours avec Excel 2010 ;) ! 

Merci d'avance 

Bruno

0
Whismeril Messages postés 18961 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 février 2024 649
23 févr. 2023 à 15:47

Et si tu écris "Projet" en dur?


0
tvnbebeKIHN Messages postés 12 Date d'inscription mercredi 22 février 2023 Statut Membre Dernière intervention 2 mars 2023
23 févr. 2023 à 16:40

Voici ce que j'ai écrit pour mettre en dur la variable : NomFeuilleProjet = "Projet" (j'espère ne pas m'être trompé)

J'ai ensuite relancé la macro qui s'est arrêtée avec l'erreur d'exécution 1004  :

La Méthode Pastespecial de la classe  Range a échouée .

Il pointe en jaune alors la ligne : 

selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

La valeur de xlPasteAll est de -4104

0
Whismeril Messages postés 18961 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 février 2024 649
23 févr. 2023 à 23:19

Selon la doc, les paramètres de PasteSpecial sont facultatifs, et comme tu as mis les paramètres par défaut tu peux essayer sans.

Une autre option peut être d'utiliser l'enregistreur de macro de sélectionner une zone dans un fichier et la coller dans un autre pour voir s'il y a des différences de syntaxe avec 365.


0
tvnbebeKIHN Messages postés 12 Date d'inscription mercredi 22 février 2023 Statut Membre Dernière intervention 2 mars 2023
Modifié le 26 févr. 2023 à 00:04

Salut Whismeril , 

merci pour tout ce que tu fais ;) ! 

J'ai mis en commentaire la fonction facultative et la macro a poursuivi son chemin ...

Jusqu'à un autre module où j'ai obtenu également l'erreur d'exécution 9 sur la ligne de code : 

Set w = Worksheets(feuille) . 

La valeur de feuille étant "Projet" , j'ai pris l'initiative de remplacer cette ligne et d'écrire en dur :

feuille = "Projet" 

ça passe à la ligne suivante , mais pas plus loin ;) . J'obtiens désormais l'erreur d'exécution '91' : Variable objet ou variable de bloc With non définie 

Sub ChangeFilters(feuille)


Dim w As Worksheet
feuille = "Projet"
' Set w = Worksheets(feuille)
With w.AutoFilter
    If w.AutoFilterMode Then
        currentFiltRange = .Range.Address
        FilterExist = True
        With .Filters
            ReDim filterArray(1 To .Count, 1 To 3)
            For f = 1 To .Count
                With .Item(f)
                    If .On Then
                        filterArray(f, 1) = .Criteria1
                        If .Operator Then
                            filterArray(f, 2) = .Operator
                            filterArray(f, 3) = .Criteria2
                        End If
                    End If
                End With
            Next
        End With
       Else
        FilterExist = False
        ActiveCell.SpecialCells(xlLastCell).Select
        lignetotal = Selection.Row
        currentFiltRange = "$A$3:$DM$" & lignetotal
    End If
End With

Il est possible qu'on soit proche de la fin de la macro , car il y a 6 modules et on est dans le dernier ;) 

Encore merci d'avance 

0
Whismeril Messages postés 18961 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 février 2024 649
24 févr. 2023 à 11:53

Si tu as mis toute la fonction en commentaire, ça ne va plus copier.

C'est les paramètres qui sont facultatifs. 

Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False

0
tvnbebeKIHN Messages postés 12 Date d'inscription mercredi 22 février 2023 Statut Membre Dernière intervention 2 mars 2023
24 févr. 2023 à 16:14

Désolé , mes connaissances sont maigres en VB ;( ! 

J'ai fait ce que tu m'as dit (juste mis en commentaire (Selection.PasteSpecial) , mais j'obtiens le même résultat que précédemment ;( (POST 13) . 

désolé ...

Bruno

0
Whismeril Messages postés 18961 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 février 2024 649
24 févr. 2023 à 16:24

Laisse le pastespecial, sans rien derrière (enlève les instructions que j'ai postées en #14)


0
tvnbebeKIHN Messages postés 12 Date d'inscription mercredi 22 février 2023 Statut Membre Dernière intervention 2 mars 2023
24 févr. 2023 à 16:35

C'est exactement ce que j'avais fait initialement , j'avais uniquement laissé Selection.Pastespecial et virer les paramètres derrière ;) ! 

J'ai retenté au cas où et j'obtiens toujours l'erreur d'exécution 91 décrite dans le POST 13 ...

0
Whismeril Messages postés 18961 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 février 2024 649
24 févr. 2023 à 23:37

Ah

J'ai mis en commentaire la fonction facultative 

était trompeur, la.fonction tu l'avais gardée en fait.


 

dans le.message #13, on dirait que la ligne 

' Set w = Worksheets(feuille)

est commentée, si c'est bien le cas, il n'y a rien de w quand tu veux accéder à ses propriétés.

Il faudrait dêcommenter.

Pour tes prochains posts, pense à forcer le langage Basic pour la coloration, comme décrit ici https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code


0
tvnbebeKIHN Messages postés 12 Date d'inscription mercredi 22 février 2023 Statut Membre Dernière intervention 2 mars 2023
1 mars 2023 à 10:22

Salut Wishmeril , 

je l'avais commentée car j'avais mis en dur la valeur ;)

Je l'ai décommentée , mais l'erreur reste identique ;( sur la ligne with w.AutoFilter j'obtiens erreur d'exécution '91' : Variable objet ou variable de bloc With non définie

Si tu as encore une idée , je suis preneur .

Merci pour tout 

0

Bonjour,

Quand une application fonction depuis un certain temps et qu'elle se met à déconner après un évolution de version, windows et/ou Excel, je me dis qu'il s'agit d'un problème environnementale !

Certe il faut vérifier la déclaration des API, mais également le chemin des libraires utiliser dans les références du projet VBA.

En effet le chemin de ces DLL est embarqué dans le projet VBA. Par exemple visuel Basic For Application devait ce trouver dans "programme file (X86)" et maintenant dans "programme file wo64.

Dans VBA=>menu=>outils=>références

Supprimes si il en a les librairies manquantes!

0
tvnbebeKIHN Messages postés 12 Date d'inscription mercredi 22 février 2023 Statut Membre Dernière intervention 2 mars 2023
2 mars 2023 à 14:27

Bonjour et merci Dysothographie , 

j'ai ouvert les références comme tu l'as si bien décrit dans ton message et voici les 5 références cochées 

Chacune d'elle renvoi vers un fichier qui après vérification existe bien sur mon PC . 

Par contre , tu marques "Supprime les librairies manquantes" et là je ne comprends pas ... 

Pourrais tu STP me donner un peu plus de détails STP ? 

Merci d'avance 

0

De toutes évidence tu n'a pas de librairie manquente car tu verrais le nom de la librairie avec la précision manquante.

Ça arrive souvent quand les versions évoluent.

0
Rejoignez-nous