Déclaration de variable

Bonjour, je viens vers vous car après des heures d'essaie et d'échec je n'arrive toujours pas à trouver la solutions à mon problème.

J'ai une requête power query dont la source est changée automatiquement en fonction de la valeur d'une cellule. Jusque là tout va bien. 2 lignes à côté de la requête j'inscrit un numéro d'article ainsi que sa désignation à l'aide de ce code :

    X = Application.Index(Range("Feuille_1[Composant::Refpiece]"), Application.Match("0", Range("feuille_1[Niveau]"), 0))
    y = Application.Index(Range("Feuille_1[DesignationComposant_FR::DesignationMajuscule]"), Application.Match(y, Range("Feuille_1[Composant::Refpiece]"), 0))

Range("A1").End(xlToRight).Offset(0, 2).Value = y & vbCrLf & "-" & vbCrLf & X

tant que je ne modifie pas la requête manuellement (ajout, suppression de colonne etc.) le code fonctionne très bien et la requête se mets bien à jour ainsi que le texte de la cellule concernée. Malheureusement si je rajoute une colonne à la requête manuellement, lorsque j'effectue le code j'ai une erreur d'exécution 13 qui apparait. sur la ligne "range("A1").end(xltoright).offset....

image

Savez-vous quel est l'origine du problème? j'ai essayer en déclarant X et Y as string, boolean, integer rien n'a faire...

Je vous remercie et attends impatiemment votre réponse :)

Bonjour,

En exécutant votre code en pas à pas détaillé via F8 quand vous êtes dans le code de votre macro. Que renvoie X et y ? J'ai un doute sur y car vous vous renvoyez y sur lui même via l'EQUIV ... J'investiguerai de ce côté.

    y = Application.Index(Range("Feuille_1[DesignationComposant_FR::DesignationMajuscule]"), Application.Match(y, Range("Feuille_1[Composant::Refpiece]"), 0))

Si vous n'y arrivez pas merci de joindre un fichier représentatif et le résultat attendu.

Cdlt,

Bonjour,

ah oui merci, j'ai modifié les variables x et y pour le poste pour simplifié. effectivement j'ai oublié de changer la valeur dans la variable y. En remplaçant Y par X voici ce que me renvoient les variable :

image

avec ce code :

Sub test()
X = Application.Index(Range("Feuille_1[Composant::Refpiece]"), Application.Match("0", Range("feuille_1[Niveau]"), 0))
y = Application.Index(Range("Feuille_1[DesignationComposant_FR::DesignationMajuscule]"), Application.Match(X, Range("Feuille_1[Composant::Refpiece]"), 0))
Range("L2").Value = X
Range("L3").Value = y

End Sub

donc maintenant ça fonctionne. je vais réessayer de rajouter des colonnes à ma requête et vous tiens au courtant. Merci d'avoir remarqué la petite erreur... :)

effectivement en rajoutant des colonnes j'ai à nouveau l'erreur qui intervient...

après avoir rajouté des colonnes voici la valeur que me renvoient x et y : #N/A

toujours avec ce code :

Sub test()
X = Application.Index(Range("Feuille_1[Composant::Refpiece]"), Application.Match("0", Range("feuille_1[Niveau]"), 0))
y = Application.Index(Range("Feuille_1[DesignationComposant_FR::DesignationMajuscule]"), Application.Match(X, Range("Feuille_1[Composant::Refpiece]"), 0))
Range("L2").Value = X
Range("L3").Value = y

End Sub

Bonjour,

Je ne vois pas pourquoi l'ajout d'une colonne ferait planter un INDEX(EQUIV()) .. Ici je suppose que X n'est pas trouvé, renvoie #N/A et donc fait aussi planter le Y .. Pourriez vous tester :

Sub test()
X = Application.Index(Range("Feuille_1[Composant::Refpiece]"), Application.Match("0", Range("Feuille_1[Niveau]"), 0))
y = Application.Index(Range("Feuille_1[DesignationComposant_FR::DesignationMajuscule]"), Application.Match(X, Range("Feuille_1[Composant::Refpiece]"), 0))
Range("L2").Value = X
Range("L3").Value = y

End Sub

En effet vous cherchez dans feuille_1 alors qu'à priori ce serait Feuille_1.

Si vous pouvez nous joindre le fichier ça aiderait aussi à la compréhension.

Cdlt,

Bonjour, Merci pour votre réponse.

Je ne peux malheureusement pas envoyé le fichier mais j'ai fini par trouver une solution qui à l'air de fonctionner. je fais un ou deux essaies et je vous envoie le code qui semble avoir résolu le problème. merci !

bon toujours pas malheureusement.... j'ai essayé comme ça :

Sub test()
Dim a As Range
Dim b As Range
Dim c As Range
Set a = Range("Feuille_1[Niveau]")
Set b = Range("Feuille_1[Composant::RefPiece]")
Set c = Range("Feuille_1[DesignationComposant_FR::DesignationMajuscule]")

    Feuil16.Select
    x = Application.Index(b, Application.Match(0, a, 0))
    y = Application.Index(c, Application.Match(x, b, 0))
   Range("N1").Value = x '& vbCrLf & "-" & vbCrLf & y
Range("N2").Value = y
End Sub

mais résultat toujours #N/A

Bonjour,

Focalisez vous déjà sur le renvoi d'un numéro dans une variable identifiée par

d = Application.Match(0, a, 0)

Tant que vous aurez #N/A sur cette variable le reste renverra le même résultat.

Essayez de faire à la main sur la feuille EXCEL la formule :

=EQUIV(0;"Feuille_1[Niveau]";0)

Et voyez ce qu'elle renvoi. Si elle renvoie #N/A alors que vous avez bien la valeur, alors il devrait y avoir un problème de format.

Je ne pourrais faire plus au niveau des investigations sans fichier représentatif.

Cdlt,

' X = Application.Index(Range("Feuille_1[Composant::Refpiece]"), Application.Match("0", Range("Feuille_1[Niveau]"), 0))

-> X = Application.Index(Range("Feuille_1[Composant::Refpiece]"), Application.Match(0, Range("Feuille_1[Niveau]"), 0))

@Ergotamine, merci pour la réponse. J'ai transformé les données dans la colonne "Niveau" en nombre et enlevé les guillemets dans la ligne de la variable X. je refais un essaie maintenant

Problème résolu, un grand merci pour vos éclaircissements ! Salutations

Rechercher des sujets similaires à "declaration variable"