Indice n'appartenant pas à la sélection

Bonjour, afin de comparer des données d'un tableau avec un autre, j'utilise le code ci dessous

Set LO = thisworkbook.worksheets("tri").listobjects("articles")

la variable Lo déclarée en variant, mon fichier comporte l'onglet tri et un tableau de données dont via les gestions des noms est répertorié "articles"

je suis dans mon classeur et exécute le code mais lorsque mon code arrive à cette ligne, j'ai une erreur: indice n'appartient pas à la sélection.

quelle serait mon erreur?

Merci

Bonjour

je suis dans mon classeur et exécute le code mais lorsque mon code arrive à cette ligne, j'ai une erreur: indice n'appartient pas à la sélection.

Allez dans le gestionnaire de nom et vérifiez que votre tableau "articles" existe bien

Cordialement

Edit :

Si vous n'avez qu'un seul tableau vous pouvez aussi changer comme ceci

Set LO = thisworkbook.worksheets("tri").listobjects(1)

Si malgré ce changement vous avez encore une erreur, c'est que votre tableau n'est pas au format structuré

--> Si ok

Bonjour,

Vérifiez également que l'espion sur

thisworkbook.worksheets("tri")

renvoie bien quelque chose (donc que ça trouve la feuille), et que

thisworkbook.worksheets("tri").listobjects

Renvoie bien quelque chose aussi, vous pouvez chercher dans sa propriété items pour voir si vous trouvez le nom "articles" dans la propriété "Name"

Merci de vos pistes, je vais essayer...

Pour Dan,
"Si malgré ce changement vous avez encore une erreur, c'est que votre tableau n'est pas au format structuré"
pour créer mon tableau structuré, je l'ai sélectionné sans les en têtes et créer un nom dans la zone nom.
n'est-ce pas suffisant?

bonjour, je trouve pas l'erreur, je me permet de joindre les deux fichiers, comparaison est le fichier sur lequel un bouton lance la macro de comparaison..

Merci de votre aide

Bonjour,

C'est donc bien comme Dan l'avait prévu, le tableau dans la feuille "Compare" n'est pas un tableau nommé, il n'apparait donc pas dans ListObjects:

image

Mais dans ThisWorkbook.Names

image

Soit tu utilises Listobjects, et dans ce cas tu utilises "Mettre sous forme de tableau" pour déclarer ton tableau comme un tableau nommé, soit tu utilises ThisWorkbook.Names.

Voici un exemple d'utilisation avec ThisWorkbook.Names:

Sub test()
ThisWorkbook.Names("Articles_tbl").RefersToRange.Interior.Color = RGB(120, 120, 120)
End Sub

Ici je demande le classeur qui contient le code, les noms qu'il contient, je demande le nom qui correspond à "Articles_tbl", je demande la plage à laquelle le nom fait référence, puis je change la couleur de l'intérieur de la plage avec la valeur RGB(120,120,120). Ce qui t'intéresses c'est surtout

ThisWorkbook.Names("Articles_tbl").RefersToRange

Une fois que tu as ça, ça fonctionne exactement pareil qu'avec un Range.

On peut le voir soit dans l'explorateur d'objet, soit dans la fenêtre espionnage:

image image

RefersToRange renvoie un objet de type Range.

Bonjour,

pour créer mon tableau structuré, je l'ai sélectionné sans les en têtes et créer un nom dans la zone nom. n'est-ce pas suffisant?

Plus d'un problème... :
- Dans votre demande, vous faites mention de la ligne Set LO = thisworkbook.worksheets("tri").listobjects("articles") alors que le nom "articles" n'existe ni dans le code ni dans le gestionnaire de noms. le nom que vous avez est "articles_tbl"
- Contrairement à ce que vous écrivez votre tableau n'est tout simplement pas au format structuré

Pour corriger, faites ceci :
- Allez dans le gestionnaire de noms
- supprimer le nom Article_tbl
- Sélectionnez A3 à G747
- Allez dans le menu excel Accueil
- Cliquez sur l'icone "Mettre sous forme de tableau"
- cochez la case "mon tableau a des entêtes" puis OK
- Allez dans le gestionnaire de noms
- Sélectionnez "Tableau1"
- Cliquez sur Modifier
- Renommez selon le nom attribué dans la ligne de code à problème (set LO=.....).

Dans le code
du fichier posté le nom est "Articles_tbl" donc votre nom dans le gestionnaire de noms doit être identique ou alors vous remplacez "articles_tbl" par le chiffre "1" comme je vous ai écrit avant.
Mais c'est mieux de mettre le nom prévu dans le gestionnaire. Le chiffre 1 provoquerait un souci de résultat attendu si par exemple vous aviez deux tableaux structurés dans votre feuille Compare

Après le code fonctionne parfaitement

Cordialement

Un super grand merci à vous deux et surtout pour votre réactivité.

je mourrai ce jour encore un peu moins incrédule en VBA.

Par contre, serait il possible d'avoir aussi un msgbox avec les articles ajoutés comme ont le fait pour les articles non repris dans le tableau comparé (If Len(s) > 0 Then MsgBox s, vbInformation,)

C'est vraiment super que nous, les novices puissions utiliser la puissance VBA, même si des fois nous ne maitrisons pas tout..

Très belle journée

C'est possible,

J'ai essayé de comprendre ce qu'utilisait la msgbox actuelle, mais les noms de variables ne me parlent tellement pas que j'ai honnêtement du mal à lire le code et à savoir ce qui est utilisé.

Je suppose que si tu nous pose la question c'est que quelqu'un d'autre a codé ça, donc plutôt que de parler du code, dis nous ce que tu veux dans ta msgbox et on verra pour broder avec ce qu'on arrive à lire

Par contre, serait il possible d'avoir aussi un msgbox avec les articles ajoutés comme ont le fait pour les articles non repris dans le tableau comparé (If Len(s) > 0 Then MsgBox s, vbInformation,)

Ce sont ceux non en rouge ?

pour essayer d'expliquer , j'ai un fichier A dans lequel j'ai un bouton exécutant une comparaison avec un fichier B non ouvert.

Pour l'instant la msgbox affiche les articles repris dans le fichier A mais pas dans le fichier B, j'aimerai qu'un msgbox supplémentaire fasse l'inverse, c'est à dire que les articles repris dans le fichier B mais pas dans le A .

en effet, pour Dan, ce sont bien ceux en rouge

en effet, pour Dan, ce sont bien ceux en rouge

ceux qui sont affichés sont ceux en rouge. Mois je vous demandais si ce sont ceux qui ne sont pas en rouge que vous voulez voir

oui, en effet

Alors essayez comme ceci :

1. Variables : dans la ligne DIM au dessus du code, ajoutez "S1" derrière le s (oubliez pas de mettre une virgule)
2. Modifications code en dessous de la ligne r =application.match.....
Remplacez

If Not IsNumeric(r) Then     'pas trouvé
     cDBR(i, 1).Interior.ColorIndex = 3     'colorer 3 pour rouge les articles inconnu dans "Utilisations"
     s = s & vbLf & cDBR(i, 1)
End If

par ceci

If Not IsNumeric(r) Then     'pas trouvé
     cDBR(i, 1).Interior.ColorIndex = 3     'colorer 3 pour rouge les articles inconnu dans "Utilisations"
     s = s & vbLf & cDBR(i, 1)
Else: s1 = s1 & vbLf & cDBR(i, 1)
End If

Puis ajoutez cette ligne en dessous de la ligne If Len(s) > 0 Then MsgBox s

If Len(s1) > 0 Then MsgBox s1, vbInformation, "Les articles non en rouge "

Modifiez le message entre les guillemets si vous désirez autre chose

Merci de votre réponse, mais je pense ne pas m'être bien fait comprendre.

en fait lors de la comparaison , il va y avoir 3 possibilités:

Les articles qui ne sont pas dans le tableau de départ mais pas dans celui que l'on compare, une ligne est ajoutée et mise en jaune (c'est ces articles que j'aimerai aussi voir apparaitre), des articles qui se retrouvent des deux côtés (non colorés), des articles qui sont dans le tableau de départ et pas dans celui comparé (mis en rouge) qui s'affiche déjà via une msgbox.

Il y aurait au total possibilité de deux msgbox...

des articles qui se retrouvent des deux côtés (non colorés), des articles qui sont dans le tableau de départ et pas dans celui comparé (mis en rouge) qui s'affiche déjà via une msgbox.

Pas trop pigé là...

Par contre si je comprends bien : la 1iere msgbox ce sont les articles en rouge et la deuxième ce sont les articles mis en jaune ?. Et dans ce cas de jaune ce que vous voulez voir dans la msgbox c'est bien le code qui est en colonne A ?

Il y aurait au total possibilité de deux msgbox...

Oui çà j'avais compris.

oui, c'est bien cela. désolé de ne pas bien faire passer le message du resultat

Bonjour,

Alors modifiez les lignes que je vous ai donnée dans le point 2 de mon message https://forum.excel-pratique.com/s/goto/1082230 par ceci

If Not IsNumeric(r) Then     'pas trouvé
     cDBR(i, 1).Interior.ColorIndex = 3     'colorer 3 pour rouge les articles inconnu dans "Utilisations"
     s = s & vbLf & cDBR(i, 1)
ElseIf cDBR(i, 2).Interior.ColorIndex = 36 Then s1 = s1 & vbLf & cDBR(i, 1)
End If

Pas de changement pour le reste décrit dans le message

Le code vous renverra les codes des articles en jaune. (Attention à garder la couleur identique évidemment. De base le code 36 est celui qui a été utilisé plus haut dans le code par celui qui vous a fait le code complet.

Cordialement

Encore un grand merci pour la résolution de mon problème à tout les intervenants

Encore un grand merci pour la résolution de mon problème à tout les intervenants
Rechercher des sujets similaires à "indice appartenant pas selection"