Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Index.Match #N/A

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Calvus

XLDnaute Barbatruc
Bonjour le Forum,

Après une nuit à chercher et devenir fou, quelqu'un peut il m'expliquer pourquoi mon code ne fonctionne pas ?

J'ai mis dans l'exemple la ligne qui pose problème.
Code:
Range("V20").Value = Application.Index(Sheets("Clients").Range("B2:G5"), Application.Match(Sheets("Pilote").Range("y4"), Sheets("Clients").Range("B2:B5"), 0), 1)

Bouton en feuille Pilote

Merci.
 

Pièces jointes

Re : Index.Match #N/A

Re,

Je ne suis jamais dépité sinon il y a longtemps que j'aurais quitté le forum.

En paramétrant la macro vous pouvez en faire ce que vous voulez.

L'appeler comme précédemment dans une Worksheet_Change ou ici dans votre macro Click :

Code:
Sub Click()
If IsError(Application.Caller) Then Exit Sub
Dim NomShape$
NomShape = Application.Caller
'---
Recherche NomShape
End Sub

Sub Recherche(cible)
Dim col%, ncol%, t, a(), i&, n&, j%
cible = CStr(cible)
col = 7 'colonne où se fait la recherche de cible
ncol = 11 'nombre de colonnes à copier >= col
t = Sheets("Clients").[A1].CurrentRegion.Resize(, ncol + 1)
ReDim a(1 To UBound(t), 1 To ncol)
For i = 2 To UBound(t)
  If t(i, col) = cible Then
    n = n + 1
    For j = 1 To ncol
      a(n, j) = t(i, j)
    Next j
  End If
Next i
'---restitution et mise en forme---
Application.ScreenUpdating = False
With [U7] '1ère cellule, à adapter
  .Resize(Rows.Count - .Row + 1, ncol).Delete xlUp 'RAZ
End With
If n Then
  With [U7].Resize(n, ncol)
    .Value = a
    .Interior.ColorIndex = 37 'bleu
    .Borders(xlEdgeLeft).Weight = xlMedium
    .Borders(xlEdgeRight).Weight = xlMedium
    .Borders(xlEdgeBottom).Weight = xlMedium
    .Borders(xlInsideVertical).Weight = xlThin
  End With
End If
Columns.AutoFit 'ajustement largeur
End Sub
Fichier joint.

A+
 

Pièces jointes

Re : Index.Match #N/A

Re,

Job ! Merci ENORMEMENT !!! 🙂🙂
Je vais probablement supprimer l'autofit pour des raisons de confort d'affichage (mais surtout que ça décale toutes les bordures de ma carte, ce qui est assez ennuyeux, sauf pour quelqu'un qui pense se trouver à Nice alors qu'il est à Berlin ! 🙂), et tester plus profondément, mais pour l'instant ça fonctionne à merveille.

Je vais également attendre la retraite pour comprendre ces fichus codes !!

Et revenir pour la suite...
Ne vous planquez pas Job ! 🙂
 
Re : Index.Match #N/A

Re,

Ca fonctionne mieux en effet.

De mon coté j'avais corrigé par : Columns("U:AE").AutoFit (eh oui ! je progresse, planquez vous les gars !! 😀😀

Mais j'ai un autre tableau en dessous qui joue au yoyo, alors je vais certainement m'en passer.

Merci pour tout et bonnes vacances dans le froid polaire de Normandie. Pensez bien à prendre une dizaine de parapluies également. Je penserai bien à vous, ici au chaud ! 🙂🙂🙂
 
Dernière édition:
Re : Index.Match #N/A

Bonjour Calvus, le forum,

On ne peut pas passer sous silence le filtre avancé :

Code:
Sub Recherche(cible)
Dim col%, ncol%, critere As Range, n&
cible = CStr(cible)
col = 7 'colonne où se fait la recherche de cible
ncol = 11 'nombre de colonnes à copier >= col
Application.ScreenUpdating = False
'---RAZ---
With [U7] '1ère cellule, à adapter
  .Resize(Rows.Count - .Row + 1, ncol).Delete xlUp
End With
'---filtre avancé---
Set critere = [T1:T2] 'où l'on veut
With Sheets("Clients").[A1].CurrentRegion.Resize(, ncol)
  critere(1) = .Cells(1, col)
  critere(2) = cible
  .AdvancedFilter xlFilterCopy, critere, [U7]
End With
critere = ""
[U7].Resize(, ncol).Delete xlUp
With [U7].Cells(1, col)
  n = Application.CountA(.Resize(Rows.Count - .Row + 1))
End With
'---mise en forme---
If n Then
  With [U7].Resize(n, ncol)
    .Interior.ColorIndex = 37 'bleu
    .Borders(xlEdgeLeft).Weight = xlMedium
    .Borders(xlEdgeRight).Weight = xlMedium
    .Borders(xlEdgeBottom).Weight = xlMedium
    .Borders(xlInsideVertical).Weight = xlThin
  End With
End If
[U7].Resize(, ncol).EntireColumn.AutoFit 'ajustement largeur
End Sub
Notez que que le filtre copie les cellules avec leurs formats (exemple Code Postal).

Fichier (2).

Bonne journée.
 

Pièces jointes

Re : Index.Match #N/A

Re,

Pour comparer les 2 méthodes j'ai copié le tableau source sur 60000 lignes :

- fichier (1) => environ 1,6 seconde

- fichier (2) => environ 1,2 seconde

L'écart n'est pas très significatif.

A+
 
Re : Index.Match #N/A

Bonjour Job, le Forum,

J'avoue ne pas suivre là.
Je ne vois pas de différence. Que devrais-je faire avec les filtres, ou où les appliquer pour qu'il se passe quelque chose ?

Merci et bonne journée.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

B
  • Question Question
Réponses
3
Affichages
1 K
L
Réponses
1
Affichages
1 K
L
R
Réponses
20
Affichages
4 K
RaVenSs
R
Réponses
1
Affichages
1 K
N
Réponses
10
Affichages
5 K
Nicocotte125
N
C
Réponses
4
Affichages
2 K
C
M
  • Question Question
Réponses
3
Affichages
1 K
M
N
Réponses
1
Affichages
650
New_VBA_User
N
  • Question Question
Autres vbYes
Réponses
5
Affichages
843
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…