Faire un recherche V en VBA

Bonjour,

De retour sur ce bon ami qu'es Excel. La reprise est dur

Je cherche à faire un appel de case en fonction du remplissage de la colonne précédente :

image

Ci dessous mon exemple :

image

Si la colonne K a été remplis, je souhaiterai que la colonne Type aille chercher le résultat E2.

ws.Cells(nextRow, "L").Value = ComboBox7.Value ' +1 colonne

Merci d'avance

bonjour,

ceci devrait suffire pas besoin de recherchev, on prend simplement les 6 premiers caractères de configuration type

ws.Cells(nextRow, "L").Value = left(ws.cells(nextrow,"K"),6)

Bonjour,

C'est en effet une manière de faire, mais je vais quand même avoir besoin de la recherche car dans d'autres cas, je dois retourner des valeurs numériques plutôt que du texte similaire.

Merci h2so4 pour ta réponse et merci d'avance pour la suite

bonjour,

C'est en effet une manière de faire, mais je vais quand même avoir besoin de la recherche car dans d'autres cas

dans ce cas

    dl=ws.cells(rows.count,4).end(xlup).row
    Set sr = ws.Range("D2:E" & dl) 'plage de recherche 
' ton code
        ws.Cells(nextrow, "L") = Application.VLookup(ws.Cells(nextrow, "K"), sr, 2, False)
'ton code

Pour redéfinir mon besoin :

J'ai un tableau de valeur dans une feuille "Données"

image

Suite au remplissage d'un formulaire type formulaire de base de données, je me retrouve avec le tableau suivant dans une autre feuille "Couts" :

image

Mon but est donc grâce à une RECHECHEV de lire la cellule E2 de la feuille "Couts", d'aller chercher une correspondance dans la feuille "Données" de la colonne correspondante (B) et de reporter le prix public (D) dans la feuille "Couts" en case D3.

Je ne sais pas si j'ai été plus claire cette fois-ci.

N'hésitez pas si vous avez des questions.

Merci d'avance

Tu as été trop rapide, le temps que je redéfinisse tu avais répondu.

Je regarde ça de suite

image

Re h2so4. Je viens de tester la recherche mais j'ai une erreur

Je comprend bien la fonction VLookup et le nextRow "K" pour aller chercher la case suivante.

Mais le 2 sert à quoi? et le Application?

bonjour,

bon, je pense qu'il est temps que tu mettes un fichier exemple représentatif et contenant tes macros, ce sera plus simple pour t'aider (cfr la charte du forum). Tes copies d'écran, on ne peut rien en faire. Merci également de préciser l'erreur que tu reçois, plutôt que de simplement dire j'ai une erreur.

le 2 est le 3ème paramètre de la fonction excel Vlookup, voir aide de cette fonction (rechercheV en français)

le application. indique à VBA d'utiliser une fonction de l'application en cours (ici une fonction excel), VBA ne connaissant pas cette fonction.

Ce code ne fonctionne pas tel quel il y manque tes instructions, notamment celle qui donne une valeur à la variable nextrow

Pas de problème le voici.

bonsoir,

voici une correction, mais je doute que ce soit le résultat final attendu.

Private Sub CommandButton1_Click()
    'compléter de la colonne type
    Set ws = Worksheets("Paramètres")
    lastRow = ws.Cells(Rows.Count, "K").End(xlUp).Row

    'Ajoute les valeurs numériques suivant les datas rentées pas le technicien
    dl = ws.Cells(Rows.Count, 4).End(xlUp).Row
    Set sr = ws.Range("D2:E" & dl) 'plage de recherche
    For nextRow = 2 To lastRow
        ws.Cells(nextRow, "L") = Application.VLookup(ws.Cells(nextRow, "K"), sr, 2, False)
    Next nextRow

End Sub

En effet ça ne répond que partiellement mais on avance tout de même

Le tableau de la feuille "Couts" se remplis à la suite de l'utilisation de la macro "Diagnostique Technicien".

A partir de la :

-> Il doit y avoir détection ou lecture de la case E2 ( feuille "Couts" ) puis une recherche dans la feuille "Données" colonne B2 et report de la valeur "Prix public HT" correspondante dans la case E3.

Pas si simple à expliquer.

Du coup je suis en train de modifier le UserForm4 pour tester tout ça!

Une fois cet exemple fait, le reste sera un jeu d'enfant.

J'espère que ce message va t'aider.

Je suis en train de prendre une autre approche si la valeur rechercher est à côté dans le tableau :

Private Sub CommandButton1_Click()

Dim wsCouts As Worksheet
    Dim wsDonnees As Worksheet
    Dim Reference As String
    Dim PrixPublicHT As Double
    Dim Trouve As Range

  ' Définir les feuilles de travail
    Set wsCouts = ThisWorkbook.Sheets("Couts")
    Set wsDonnees = ThisWorkbook.Sheets("Données")

  ' Lire la référence depuis E2
    Reference = wsCouts.Range("E2").Value

  ' Rechercher la référence dans la colonne B de la feuille "Données"
    Set Trouve = wsDonnees.Columns("B").Find(Reference, LookIn:=xlValues)

  ' Si la référence est trouvée
    If Not Trouve Is Nothing Then
        ' Récupérer le Prix public HT correspondant
        PrixPublicHT = wsDonnees.Cells(Trouve.Row, 2).Offset(0, 1).Value ' Supposant que le Prix public HT est situé à côté de la référence

      ' Mettre à jour E3 avec le Prix public HT
        wsCouts.Range("E3").Value = PrixPublicHT
    Else
      ' Si la référence n'est pas trouvée, afficher un message d'erreur
        MsgBox "Référence non trouvée dans la feuille Données", vbExclamation
    End If

End Sub

Si vous trouvez mieux je suis preneur
Sachant que cette solution ne marche pas encore aha

re,

comme le prixHT se trouve en colonne D, tu peux écrire directement le nom de la colonne au lieu d'utiliser l'instruction offset.

PrixPublicHT = wsDonnees.Cells(Trouve.Row, "D").Value ' Supposant que le Prix public HT est situé dans la colonne D

si tu veux malgré tout utiliser l'instruction offset

PrixPublicHT = wsDonnees.Cells(Trouve.Row,2).offset(0,2).Value ' Supposant que le Prix public HT est situé 2 colonnes à droite de la référence qui est en colonne B (2ème colonne)

Hello,

On est pas mal mais le fait de nommer ou vont atterrir les données chercher rend le code monstrueux étant donné que je réitère de nouveau chiffrage sans supprimer le précédent.

Je cherche donc à remplacer la ligne :

wsCouts.Range("E4").Value = PrixPublicHT

Par une du style :

nextRow = wsCouts.Cells(Rows.Count, "E").End(xlUp).Row

Mais pou l'instant ça ne fonctionne pas.

Code en question ci dessous

(J'ai remis le fichier avec les avancées en cours)

    Reference = wsCouts.Range("E2").Value
    Set Trouve = wsDonnees.Columns("B").Find(Reference, LookIn:=xlValues)
    If Not Trouve Is Nothing Then
        PrixPublicHT = wsDonnees.Cells(Trouve.Row, 2).Offset(0, 3).Value
        wsCouts.Range("E4").Value = PrixPublicHT
    Else
        MsgBox "Référence non trouvée dans la feuille Données", vbExclamation
    End If
    

Merci d'avance

J'ai trouvé :

    Reference = wsCouts.Range("E2").Value
    Set Trouve = wsDonnees.Columns("B").Find(Reference, LookIn:=xlValues)
    If Not Trouve Is Nothing Then
        PrixPublicHT = wsDonnees.Cells(Trouve.Row, 2).Offset(0, 3).Value
        DerniereLigne = wsCouts.Cells(wsCouts.Rows.Count, "E").End(xlUp).Row
        wsCouts.Cells(DerniereLigne + 1, 5).Value = PrixPublicHT
    Else
        MsgBox "Référence non trouvée dans la feuille Données", vbExclamation
    End If

Merci h2so4 pour ton aide,

Je clos le topic.

Bonne journée

Rechercher des sujets similaires à "recherche vba"