Problème recherche référence vba (double cliquer)
JeanPhi71000
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai crée une macro qui permet de vérifier si une références (un nom de pièce quoi) est dans un tableau donné, situé dans une autre feuille mais du même classeur. Ce tableau est une donnée externe provenant d'un autre classeur, mais cela ne pose pas de problème. Si la référence existe, alors je voudrais que la macro me renvoie le numéro de la ligne dans la case d'à côté de la référence cherchée.
Si la référence existe en plusieurs fois, je voudrais avoir le dernier numéro de lignes. S'il elle n'est pas présente, j'écris "non".
Voici en partie la macro, avec L1 la liste de ref à chercher et L2 le tableau dans lequelle je cherche :
Mon souci est le suivant, le code fonctionnait tout très bien et un jour, certaines références étaient indiquées comme inexistante ("non") alors qu'elle se situe pourtant dans le tableau (en vérifiant manuellement).
Le plus étrange c'est que si je double clique sur la référence du tableau et que je refais tourner la macro, cette fois ci elle est trouvée.
J'ai eu beau tourner le problème dans tous les sens mais je ne cmprends pas...
Si quelqu'un pouvait m'aider cela serait très appréciable. Merci.
J'ai crée une macro qui permet de vérifier si une références (un nom de pièce quoi) est dans un tableau donné, situé dans une autre feuille mais du même classeur. Ce tableau est une donnée externe provenant d'un autre classeur, mais cela ne pose pas de problème. Si la référence existe, alors je voudrais que la macro me renvoie le numéro de la ligne dans la case d'à côté de la référence cherchée.
Si la référence existe en plusieurs fois, je voudrais avoir le dernier numéro de lignes. S'il elle n'est pas présente, j'écris "non".
Voici en partie la macro, avec L1 la liste de ref à chercher et L2 le tableau dans lequelle je cherche :
'Selection des références étudiées (L1)
Sheets("CopierIci").Select
Range("B2").Select
Set L1 = Range(Selection, Selection.End(xlDown))
'On appelle L2 la liste contenant les informations
Sheets("InfosDAM").Select
Range("A1").Select
Set L2 = Range(Selection, Selection.End(xlDown))
'On Selectionne la feuille outil
Sheets("FeuilleOutil").Select
'Pour chaque élément étudié (de L1) on regarde où il est dans L2
For i = 1 To L1.Rows.Count
For j = 1 To L2.Rows.Count
If L1(i, 1).Value2 = L2(j, 1) Then
Sheets("FeuilleOutil").Cells(i + 1, 1) = j
End If
If j = L2.Rows.Count And Sheets("FeuilleOutil").Cells(i + 1, 1) = "" Then
Sheets("FeuilleOutil").Cells(i + 1, 1) = "non"
End If
Next j
Next i
Mon souci est le suivant, le code fonctionnait tout très bien et un jour, certaines références étaient indiquées comme inexistante ("non") alors qu'elle se situe pourtant dans le tableau (en vérifiant manuellement).
Le plus étrange c'est que si je double clique sur la référence du tableau et que je refais tourner la macro, cette fois ci elle est trouvée.
J'ai eu beau tourner le problème dans tous les sens mais je ne cmprends pas...
Si quelqu'un pouvait m'aider cela serait très appréciable. Merci.
A voir également:
- Problème recherche référence vba (double cliquer)
- Double ecran - Guide
- Whatsapp double sim - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Double driver - Télécharger - Pilotes & Matériel
- Double appel - Guide
1 réponse
Bonjour,
J'ai pas tout compris (en particulier le contenu de la feuille outils),
mais il faut absolument éviter les Select inutiles.
Peut-être :
J'ai pas tout compris (en particulier le contenu de la feuille outils),
mais il faut absolument éviter les Select inutiles.
Peut-être :
Option Explicit Sub Test() Dim L1 As Range Dim L2 As Range Dim C1 As Range Dim C2 As Range 'Définition des références étudiées (L1) With Sheets("CopierIci") Set L1 = .Range(.Range("B2"), .Range("B2").End(xlDown)) End With 'Définition de la liste contenant les informations (L2) With Sheets("InfosDAM") Set L2 = .Range(.Range("A1"), .Range("A1").End(xlDown)) End With 'On travaille sur la feuille outil With Sheets("FeuilleOutil") 'Effacer les anciennes valeurs .Columns("A:B").Clear 'Pour chaque élément étudié (de L1) For Each C1 In L1.Cells ' On reporte la référence sur la feuille outils ... .Cells(C1.Row, "A").Value = C1.Value For Each C2 In L2.Cells If C1.Value2 = C2.Value Then '... et on note la ligne ou elle se trouve dans L2 .Cells(C1.Row, "B").Value = C2.Row End If Next C2 With .Cells(C1.Row, "B") '... si pas trouvée If .Formula = "" Then .Value = "non" End With Next C1 End With End Sub
Tout d'abord merci pour votre réponse rapide, utile et qui améliore grandement mon code et mes connaissances VBA.
Cependant, le problème persiste toujours : certaines références qui sont bien dans la liste L2, c'est-a dire dans la feuille "infoDAM", ne sont pas "reconnu".
Ce problème disparait si je double clique ou j'appuie sur entrée sur les références individuellement de la liste "infoDAM". Je pense donc que le problème vient de la connexion des données, c'est comme si certaines données n'étaient pas activées...
voici ci-joint le fichier en question mais il manque le fichier de données que je ne peut pas transmettre :
https://www.fichier-xls.fr/notfound.php
Cordialement,
Le problème vient du fait que les cellules ne contiennent pas la même chose, dans infoDAM les références sont toutes des textes mais dans CopierIci certaines sont des textes et d'autres des nombres (Par exemple 372851 est un nombre dans CopierIci et un texte dans InfoDAM).
Une astuce pour différencier rapidement les nombres des textes consiste à regarder comment est alignée la valeur dans la cellule (en absence d'alignement horizontal spécifique, c'est à dire en standard, ni droite, ni gauche, ni centré, ni ... ). Les textes sont à gauche, les nombres à droite, les booléen et les erreurs sont centrés et en majuscules.
Tu vois immédiatement que dans InfoDAM 372851 est à gauche et dans CopierIci il est à droite
C'est un des "défauts" d'Excel : lorsqu'on saisit quelque chose, chaque fois qu'il peut l'interpréter comme un nombre (entier, décimal, date, monnaie, ...), il le transforme automatiquement en valeur numérique correspondante. C'est ce qui se passe lorsque tu ressaisis la même valeur dans InfoDAM. Par contre lors d'un import ou d'un copier/coller il ne modifie pas les valeurs.
Je suppose que les infos InfoDAM proviennent d'une base de données extérieure, c'est pour ça (et c'est normal) qu'elles sont toutes au format texte. Pour éviter cette transformation (dans infoDAM) , il faut au préalable définir la plage concernée au format Texte, pour qu'il reste sous forme de texte en cas de ressaisie.
C'est sur la feuille CopierIci que les données ne correspondent pas à celles de InfoDAM (372851 est un nombre au lieu d'être un texte).
Une solution consiste donc simplement à définir la colonne B de CopierIci au format texte et a ressaisir tous les nombres (il seront alors considérés comme du texte).
Une autre des solutions consiste à remplacer le test, pour comparer indifféremment les nombres et les textes.
Au lieu de :
Mettre :
Avec cette solution, pas besoin de modifier les formats.
Cdlt
Patrice