Xlookup, mais la cellule de destination change de place ... ?
Bonjour à tous,
Je ne maîtrise pas les formules dans VBA, et je bloque sur un problème : intégrer une fonction "recherchex" dans une cellule, mais celle-ci change de place à chaque fois.
Résultat, la formule fonctionne la première fois, puis se décale et ne trouve plus le résultat (logique)
Quelqu'un peut-il m'expliquer comment intégrer dans ma formule le fait que l'adresse de destination évolue, svp ?
Ci-dessous un exemple de ce que je cherche à obtenir :
Bonjour à tous,
Avec un simple fonction filtre()
Bonjour,
Merci pour la réponse rapide.
En revanche, je suis débutant en VBA (et tout seul pour apprendre), et je ne connais pas cette fonction :
-> je suis allé voir la définition sur le site "learn microsoft" (les nouveaux n'ont pas le droit de poster des liens sur le forum)
Mais je n'ai rien compris.
Je suis allé voir aussi sur les forums traitants du sujet, mais c'est du chinois, pareil. J'ai cru comprendre qu'il s'agit de créer un tableau de référence pour figer une zone de recherche ? Est-ce que ça remplacerait même la fonction recherchex ? mais je me trompe très probablement.
Auriez-vous une idée plus basique, quitte à faire dans le bricolage, svp ?
-> Je présume que cette fonction filtre est sans doute la meilleur chose à faire, mais je ne sais pas la mettre en oeuvre -_-' (déso)
Bonjour,
@djidji59430 : êtes-vous sûr du fichier posté car je ne vois pas de fonction Filtre. Ou j'ai mal vu ?
@ Cyrano:
En revanche,....., et je ne connais pas cette fonction :
Explications ici --> https://excel-pratique.com/fr/fonctions/filtre
Pour ce qui est de votre fichier :
1. le code est placé dans Thisworkbook. Il est mal placé dans le fichier. Déplacez le dans un module (menu VBA --> Insertion --> Module) puis ré-associez le bouton au code
2. si vous voulez mettre votre formule dans un code, mettez manuellement votre formule en place dans le fichier.
Une fois fait, utilisez l'enregistreur automatique (icone "enregistrer une macro").
Ensuite sélectionnez votre formule dans la barre de formule et faites un copier coller dans la cellule ou une autre à coté.
Arrêtez l'enregistreur automatique puis allez dans l'éditeur VBA. Vous verrez qu'excel a créé un module avec le code correspondant à votre formule.
Après il suffit d'arranger pour que cela fonctionne en fonction de votre souhaite final
3. Il me semble qu'il vous manque une info en feuil1.
exemple : Si vous ajoutez une colonne en feuil2, on a 39 en C1 via le code et la formule RechercheX dans les lignes en dessous de la colonne C. Là dès que vous allez modifier en feuil1, vous allez avoir les même valeurs en feuil2 en colonne B et C.
La question est de savoir comment vous faites intervenir l'info en ligne 1 de la feuil2 dans la feuil1 pour différencier les valeurs obtenues en colonne B et C de la feuil2. En gros est-ce que C1 ne devrait pas être mentionné en feuil1 ?
Ou alors je n'ai pas compris ce que vous voulez faire
Désolé, je me suis emmêlé les pinceaux !
Bonjour Dan,
Alors dans l'ordre :
-> moi non plus, je n'ai pas vu non plus la fonction filtre, mais bon, il y avait l'info du message.
1. Module : c'est fait.
2.Intégrer une formule : c'est ce que j'ai fait, et c'est tout le problème !
Le logiciel propose un référentiel comme ceci :"=XLOOKUP(RC[-1],Feuil1!C[-1],Feuil1!C)", ce qui donne dans mon exemple :
=RECHERCHEX(A2;Feuil1!A:A;Feuil1!B:B) dans la premiere colonne
puis
=RECHERCHEX(B2;Feuil1!B:B;Feuil1!C:C) dans la colonne suivante
puis
=RECHERCHEX(C2;Feuil1!C:C;Feuil1!D:D) dans la troisième colonne
etc...
Or, moi, ce que je veux, c'est retrouver à chaque fois la première occurence "=RECHERCHEX(A2;Feuil1!A:A;Feuil1!B:B)" quelque soit la colonne dans laquelle elle est inscrite...
Toujours dans cet exemple du fichier ci-joint, je souhaite retrouver le même résultat "blabla1", 2, 6, et 4 dans toutes les colonnes... Création d'une nouvelle colonne en Feuil2 = retrouver la formule recherchex qui se réfère à nouveau à la colonne 1 et aux infos de la feuil1.
ça à l'air bête comme ça, mais ça fait sens pour le fichier final ^^
-> Je n'ai pas voulu compliquer les choses en vous mettant le code complet avec le fichier, d'autant que le reste de mon programme fonctionne bien.
3. Voir le point "2." -> je ne souhaite pas que cette info soit différenciée, justement.
Voilà, désolé, si j'ai été un peu long, j'espère que c'est plus compréhensible ?
Je remets mon fichier mis à jour :
Edit modo : Fichier ici --> https://forum.excel-pratique.com/s/goto/1219442
Et merci pour le lien vers le tuto de la fonction filtre ! Je vais aller voir si j'y comprends quelque chose ^^'
Je crois que j'ai oublié d'enregistrer avant de placer le fichier dans mon message précédent....
Au cas où, le voici :
re
Je n'ai pas la fonction RechercheX ou Filtre dans ma version Excel actuelle.
Toutefois essayez le code comme ceci :
Sub ma_recherchex()
Dim nouvellecolonne As integer
Dim derniereligne As integer
With Sheets("Feuil2")
'Trouver la première colonne libre + 1
nouvellecolonne = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
'ajouter la semaine dans l'en-tête -> la valeur se trouve dans la Feuil3
.Cells(1, nouvellecolonne) = Sheets("Feuil3").Cells(3, 1).Value
'derniere ligne en feuil2 colonne 1
derniereligne = .Cells(Rows.Count, 1).End(xlUp).Row
'ajout formule dans nouvelle colonne
.Range(.Cells(2, nouvellecolonne), .Cells(derniereligne, nouvellecolonne)).FormulaR1C1 = "=XLOOKUP(RC1,Feuil1!C1,Feuil1!C2)"
End With
End SubMais si la fonction Filtre proposé par djidji59430 fonctionne pour vous, préférez sa solution. Cela évite les codes VBA au profit d'une fonction. C'est toujours plus facilement modifiable.
si ok pensez à
Cordialement
ça fonctionne très bien, merci beaucoup !
Alors pour ce que j'en comprends,
- Il faut retirer les crochets de la formule enregistrée et ajouter le numéro de colonne "absolu" : "=XLOOKUP(RC[-1],Feuil1!C[-1],Feuil1!C)" devient alors "=XLOOKUP(RC1,Feuil1!C1,Feuil1!C2)"
- J'avais mis "Dim nouvellecolonne as Long", mais dans votre code, il est décrit comme "as integer" -> quel est le degré d'importance de cette info, svp ?
- J'ai lu le tuto de la fonction FILTRE : c'est très intéressant et me sera probablement utile ailleurs, mais là, je ne vois pas comment l'intégrer dans mon programme.
Merci encore pour le coup de main : j'utilise beaucoup "recherchex" dans tous mes fichiers, alors apprendre son orthographe et conjugaison dans VBA va bien m'aider.
Cordialement,
- Il faut retirer les crochets de la formule enregistrée et ajouter le numéro de colonne "absolu"
Exact
- J'avais mis "Dim nouvellecolonne as Long", mais dans votre code, il est décrit comme "as integer" -> quel est le degré d'importance de cette info, svp ?
Avec Integer vous pouvez l'utiliser jusque 32768 lignes. Avec Long vous allez jusque 2.147.483.648 lignes. Avec VBA plus votre variable est petite moint vous utilisez de mémoire excel. Donc pensez toujours à utiliser la variable la plus petite.
Pour en apprendre plus --> https://excel-pratique.com/fr/vba/variables
j'utilise beaucoup "recherchex" dans tous mes fichiers, alors apprendre son orthographe et conjugaison dans VBA va bien m'aider.
Oui ce sont des fonctions excel plus récentes. Donc si on a la possibilité de les utiliser autant le faire.
Le tout est de voir si votre fichier ne sera pas utilisé par des utilisateurs qui ont une version excel inférieure (comme moi
Cordialement