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

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:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…