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

Index.Match #N/A

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

  • Index Match.xlsm
    20 KB · Affichages: 43

job75

XLDnaute Barbatruc
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

  • Shapes Index Match(1).xlsm
    31.2 KB · Affichages: 35

Calvus

XLDnaute Barbatruc
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 !
 

Calvus

XLDnaute Barbatruc
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:

job75

XLDnaute Barbatruc
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

  • Shapes Index Match(2).xlsm
    31.6 KB · Affichages: 33

job75

XLDnaute Barbatruc
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+
 

Calvus

XLDnaute Barbatruc
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.
 

Discussions similaires

Réponses
1
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…