XL 2010 valeurs correspondantes

KEPT

XLDnaute Nouveau
Bonjour, je travaille sur un document concernant véhicule et immatriculation, qui pour me faciliter la tache, je voudrais une formule qui par exemple:
-Si la cellule B5= 5746 ER 01 ou 6047 FX01 ou 1359 GH01 ou 4263 FY 01
alors
-la cellule C5=PEUGEOT ou KIA ou FORD ou RENAULT respectivement et vice versa si possible.
Merci de bien vouloir m'aider.
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

Un essai en exemple, il y a deux plages nommées dynamiques (voir gestionnaire des noms)
Une liste déroule en colonne "B" et une formule de recherche en "C"

Comme le dit djidji59430 (que je salue;)), un exemple de ton problème serait plus parlant pour t'aider.

JHA
 

Pièces jointes

  • Classeur Kept.xlsx
    9.8 KB · Affichages: 3
  • assurance vehicules.xlsx
    13.5 KB · Affichages: 1

job75

XLDnaute Barbatruc
Bonjour KEPT, djidji59430, JHA,

Une solution VBA avec cette macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo, d As Object, i&, x$, y$, a
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A1].CurrentRegion
    If Intersect(Target, .Columns("B:C").Offset(1)) Is Nothing Then Exit Sub
    tablo = .Resize(, 3) 'matrice, plus rapide
    Set d = CreateObject("Scripting.Dictionary")
    '---liste de correspondance sans doublons---
    For i = 1 To UBound(tablo) - 1
        x = UCase(Application.Trim(tablo(i, 2))): y = UCase(Application.Trim(tablo(i, 3)))
        If Not d.exists(x) And y <> "" Then d(x) = y
    Next i
    '---traitement des entrées en colonnes B et C---
    Application.ScreenUpdating = False
    Application.EnableEvents = False 'désactive les évènements
    Set Target = Intersect(.Columns("B:C").Offset(1), Target.EntireRow)
    For Each a In Target.Areas 'si entrées/suppressions multiples (copier-coller)
        tablo = a 'matrice, plus rapide
        For i = 1 To UBound(tablo)
            tablo(i, 1) = UCase(Application.Trim(tablo(i, 1))) 'contrôle
            tablo(i, 2) = d(tablo(i, 1)) 'correspondance si elle existe
        Next i
        a.Value = tablo 'restitution
    Next a
    Application.EnableEvents = True 'réactive les évènements
End With
End Sub
La macro contrôle les entrées en colonnes B et C en entrant la marque correspondant à l'immatriculation.

J'ai testé le fichier joint en copiant la plage B2:B19 sur B2:B18001 : la macro s'exécute en 0,75 seconde chez moi.

A+
 

Pièces jointes

  • assurance vehicules(1).xlsm
    25.8 KB · Affichages: 4
Dernière édition:

Statistiques des forums

Discussions
311 733
Messages
2 082 008
Membres
101 864
dernier inscrit
elrecruiter