VLOOKUP avec formulaire dans plusieurs feuilles

RYA

XLDnaute Nouveau
Bonjour,
Débutante en VBA c'est la 1ère fois que je m'adresse à un forum pour poser une question alors merci d'excuser les éventuelles maladresses.
Mon problème : dans la zone en rouge de mon fichier, je souhaiterai que ma macro cherche le nom que je saisi dans mon formulaire dans la feuille "experts". Si le nom existe, elle fait le travail. Mais si le nom n'existe pas, elle interroge alors la feuille "conditions" dans laquelle il est certain qu'elle trouve une correspondance.

Voici mon fichier :
'Procédure permettant d'ajouter un nouvel enregistrement
Private Sub CommandButtonAjout_Click()
Sheets("Source").Activate
Range("A1").Select
Selection.End(xlDown).Select 'on se positionne sur la dernière ligne non vide
Selection.Offset(1, 0).Select 'on se décale d'une ligne vers le bas
Selection.EntireRow.Insert 'insère une ligne
ActiveCell = ComboBoxNom.Value
Nom = ComboBoxNom.Value
ActiveCell.Offset(0, 1).Value = TextBoxFactureNo 'facture N°
ActiveCell.Offset(0, 2).Value = ComboBoxPeriode 'période
ActiveCell.Offset(0, 3).Value = TextBoxCommentaire 'commentaire
ActiveCell.Offset(0, 4).Value = TextBoxMontant.Value 'montant
ActiveCell.Offset(0, 5).Value = If(NOT(ISNA(VLookup(Nom;Worksheets("Experts").Range("Baseexperts"); 5, 0)); VLookup(Nom;Worksheets("Experts").Range("Baseexperts"); 5, 0);IF(NOT(ISNA(VLookup(Nom;Worksheets("Conditions").Range("tableexpert"); 5; 0); VLookup(Nom;Worksheets("Conditions").Range("tableexpert"); 5; 0);""))
ActiveCell.Offset(0, 6).Value = TextBoxEquiveuros 'equiv euros
ActiveCell.Offset(0, 8).Value = Application.WorksheetFunction.VLookup(Nom, Worksheets("Conditions").Range("tableexpert"), 3, False) 'projet
ActiveCell.Offset(0, 9).Value = Application.WorksheetFunction.VLookup(Nom, Worksheets("Conditions").Range("tableexpert"), 4, False) 'dp
ActiveCell.Offset(0, 10).Value = Application.WorksheetFunction.VLookup(Nom, Worksheets("Experts").Range("Baseexperts"), 21, False) 'conditions
ActiveCell.Offset(0, 11).Value = Application.WorksheetFunction.VLookup(Nom, Worksheets("Experts").Range("Baseexperts"), 24, False) 'frais
ActiveCell.Offset(0, 12).Value = TextBoxDatefact
ActiveCell.Offset(0, 13).Value = DateAdd("d", Cells(ActiveCell.Row, 11).Value, TextBoxDatefact.Value) 'date d'échéance
ActiveCell.Offset(0, 14).Value = TextBoxPaiement
ActiveCell.Offset(0, 15).Value = TextBoxSign1
ActiveCell.Offset(0, 16).Value = TextBoxSign2
ActiveCell.Offset(0, 17).Value = TextBoxCtaire1
ActiveCell.Offset(0, 18).Value = TextBoxCtaire2
ActiveCell.Offset(0, 19).Value = TextBoxCtaire
ActiveCell.EntireRow.Select 'sélectionne la ligne de la cellule activ
With Selection.Interior 'avec intérieur de la sélection
.Pattern = xlNone 'aucun remplissage
End With

MsgBox ""
End Sub


Par avance, merci pour votre aide.
RY
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Rya, bonjour le forum,

Peut-être comme ça :

Code:
Private Sub CommandButtonAjout_Click()
Dim R1 As Range
Dim R2 As Range

Sheets("Source").Activate
Range("A1").End(xlDown).Offset(1, 0).Select
'Selection.EntireRow.Insert 'insère une ligne (pourquoi cette ligne ?)
ActiveCell.Select ' = ComboBoxNom.Value
nom = ComboBoxNom.Value
ActiveCell.Offset(0, 1).Value = TextBoxFactureNo 'facture N°
ActiveCell.Offset(0, 2).Value = ComboBoxPeriode 'période
ActiveCell.Offset(0, 3).Value = TextBoxCommentaire 'commentaire
ActiveCell.Offset(0, 4).Value = TextBoxMontant.Value 'montant
Set R = Worksheets("Experts").Range("Baseexperts").Find(nom, , xlValues, xlWhole)
If Not R1 Is Nothing Then ActiveCell.Offset(0, 5).Value = R.Offset(0, 4): GoTo suite
Set R2 = Worksheets("Conditions").Range("tableexpert").Find(nom, , xlValues, xlWhole)
If Not R2 Is Nothing Then ActiveCell.Offset(0, 5).Value = R.Offset(0, 4)
suite:
'...
 

RYA

XLDnaute Nouveau
Bonjour Rya, bonjour le forum,

Peut-être comme ça :

Code:
Private Sub CommandButtonAjout_Click()
Dim R1 As Range
Dim R2 As Range
 
Sheets("Source").Activate
Range("A1").End(xlDown).Offset(1, 0).Select
'Selection.EntireRow.Insert 'insère une ligne (pourquoi cette ligne ?)
ActiveCell.Select ' = ComboBoxNom.Value
nom = ComboBoxNom.Value
ActiveCell.Offset(0, 1).Value = TextBoxFactureNo 'facture N°
ActiveCell.Offset(0, 2).Value = ComboBoxPeriode 'période
ActiveCell.Offset(0, 3).Value = TextBoxCommentaire 'commentaire
ActiveCell.Offset(0, 4).Value = TextBoxMontant.Value 'montant
Set R = Worksheets("Experts").Range("Baseexperts").Find(nom, , xlValues, xlWhole)
If Not R1 Is Nothing Then ActiveCell.Offset(0, 5).Value = R.Offset(0, 4): GoTo suite
Set R2 = Worksheets("Conditions").Range("tableexpert").Find(nom, , xlValues, xlWhole)
If Not R2 Is Nothing Then ActiveCell.Offset(0, 5).Value = R.Offset(0, 4)
suite:
'...

Bonjour,
Merci de vous pencher sur mon problème.
J'ai transposé le code dans ma formule et j'ai un message d'erreur.
Je joins mon fichier dans lequel il y a le message d'erreur dans la dernière feuille.

RYA
 

Pièces jointes

  • Fichier pour question.xlsm
    175.2 KB · Affichages: 49

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir le fil, bonsoir le forum,

Merci Patrice mais il y a d'autres erreurs ...

D'abord Rya, tu as deux boutons Ajout dans base. Le premier masque le second (en-dessous). Si tu cliques sur ce premier bouton ça déclenche CommandButton1_Click (qui ne contient aucun code) et pas CommandButtonAjout_Click (qui contient le code). J'ai donc supprimé le premier bouton et attribué la valeur True à la propriété [Enable] du second...

L'autre erreur est de ma faute. J'avais écrit :

Code:
Set R = Worksheets("Experts").Range("Baseexperts").Find(nom, , xlValues, xlWhole)
Il fallait écrire :
Code:
Set R1 = Worksheets("Experts").Range("Baseexperts").Find(nom, , xlValues, xlWhole)
Ton fichier modifié en pièce jointe :
 

Pièces jointes

  • Rya_v01.xlsm
    163.2 KB · Affichages: 46

Patrice33740

XLDnaute Impliqué
Bonjour,

Maintenant que tu as obtenu une réponse fonctionnelle, vu que tu est nouveau sur les Forums d'entre aide, je voudrais te dire que lorsque tu poste sur plusieurs forum, il est très important d'en informer tout le monde, de façon à éviter de faire perdre leur temps aux contributeurs sur des réponses déjà obtenues sur d'autres forums.
 

RYA

XLDnaute Nouveau
Bonsoir le fil, bonsoir le forum,

Merci Patrice mais il y a d'autres erreurs ...

D'abord Rya, tu as deux boutons Ajout dans base. Le premier masque le second (en-dessous). Si tu cliques sur ce premier bouton ça déclenche CommandButton1_Click (qui ne contient aucun code) et pas CommandButtonAjout_Click (qui contient le code). J'ai donc supprimé le premier bouton et attribué la valeur True à la propriété [Enable] du second...

L'autre erreur est de ma faute. J'avais écrit :

Code:
Set R = Worksheets("Experts").Range("Baseexperts").Find(nom, , xlValues, xlWhole)
Il fallait écrire :
Code:
Set R1 = Worksheets("Experts").Range("Baseexperts").Find(nom, , xlValues, xlWhole)
Ton fichier modifié en pièce jointe :
 

RYA

XLDnaute Nouveau
Bonsoir le forum,

Merci beaucoup Robert, le temps pour moi de "digérer" la réponse et de nettoyer mon fichier suivant tes conseils et je serai sans doute de retour pour une autre question :).

Merci également Patrice.
Désolée d'avoir posté à plusieurs endroits mais je ne connais pas trop le fonctionnement et j'avais peur de n'avoir aucune réponse.
Je constate que ce n'est effectivement pas la peine ;).

Cordialement,
RYA
 

Discussions similaires

Réponses
12
Affichages
636