XL 2016 Gestion des erreurs avec la fonction RechercheV

  • Initiateur de la discussion Initiateur de la discussion KTM
  • Date de début Date de début

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 !

KTM

XLDnaute Impliqué
Bonjours chers tous
Je voudrais comparer les informations de ma Base 2 à celles de ma Base 1 et mettre à jour la Base 2 si codes identiques .
J'ai fait une petite macro qui fonctionne mais lorsqu'il Ya des codes recherchés de Base 2 non existants dans Base 1 elle me renvoie une erreur .
Je voudrais mettre à jour les informations uniquement pour les codes existants dans Base 1.
Merci et a plus...
VB:
Sub rechercher()
Dim cell As Range
Dim pg, plg As Range
Dim x, y As Variant
Set pg = Range("F4:F21") 'Codes à rechercher dans BASE 2
Set plg = Range("A4:C21") 'BASE 1 ou se fait la recherche
For Each cell In pg
x = Application.WorksheetFunction.VLookup(cell.Value, plg, 2, 0)
y = Application.WorksheetFunction.VLookup(cell.Value, plg, 3, 0)
If Not IsError(x) Then cell.Offset(, 1) = x
If Not IsError(y) Then cell.Offset(, 2) = y
Next cell
Set pg = Nothing
Set plg = Nothing
End Sub
 

Pièces jointes

Bonjour,
Voilà un fonction qui retourne 0 si la recherche n'aboutit pas si non le numéro de ligne {row}.
On définit la source as range, la cellule de départ [A1] par exemple, il est préférable d'avoir une zone de titres car la fonction cherche les valeurs après cette cellule
Le texte recherché
Et enfin si on cherche un fragment de texte ou le texte entier
Code:
Function SerchXls(Myrange As Range, MyCellule As Range, strRecherche, EntierCell As Boolean) As Long '
On Error Resume Next
Dim CellEntrier As Integer
If EntierCell = True Then CellEntrier = xlWhole Else CellEntrier = xlPart
SerchXls = 0
SerchXls = Myrange.Cells.Find(what:=strRecherche, After:=MyCellule, LookIn:=xlFormulas, LookAt _
        :=CellEntrier, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=EntierCell).Row
If SerchXls <= MyCellule.Row Then SerchXls = 0
End Function
 
Dernière édition:
Bonjour KTM, dysorthographie,
Une autre solution est l'utilisation de "on error resume next".
Très critiquée par ailleurs, elle permet quand même de s'affranchir des erreurs lorsque celles ci sont prévisibles.
VB:
On Error Resume Next ' sautera la ligne si celle si est en erreur
For Each cell In pg
x = Application.WorksheetFunction.VLookup(cell.Value, plg, 2, 0)
 

Pièces jointes

Bonjour KTM, dysorthographie,
Une autre solution est l'utilisation de "on error resume next".
Très critiquée par ailleurs, elle permet quand même de s'affranchir des erreurs lorsque celles ci sont prévisibles.
VB:
On Error Resume Next ' sautera la ligne si celle si est en erreur
For Each cell In pg
x = Application.WorksheetFunction.VLookup(cell.Value, plg, 2, 0)
Merci mais juste un détail omis ;
Les codes de Base 2 non existants dans Base 1 doivent conserver leurs informations de Base 2.
Comment regler cela ?
 
Alors peut être :
VB:
For Each cell In pg
    If Application.CountIf(plg, cell.Value) > 0 Then ' Si >0 la valeur existe
        cell.Offset(, 1) = Application.WorksheetFunction.VLookup(cell.Value, plg, 2, 0)
        cell.Offset(, 2) = Application.WorksheetFunction.VLookup(cell.Value, plg, 3, 0)
    End If
Next cell
De cette façon si l'élément n'est pas trouvé, rien n'est modifié.
 

Pièces jointes

Alors peut être :
VB:
For Each cell In pg
    If Application.CountIf(plg, cell.Value) > 0 Then ' Si >0 la valeur existe
        cell.Offset(, 1) = Application.WorksheetFunction.VLookup(cell.Value, plg, 2, 0)
        cell.Offset(, 2) = Application.WorksheetFunction.VLookup(cell.Value, plg, 3, 0)
    End If
Next cell
De cette façon si l'élément n'est pas trouvé, rien n'est modifié.
Juste et Parfait Merci à tous....
 
- 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

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
385
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
276
Réponses
2
Affichages
90
Réponses
1
Affichages
493
Retour