Afficher un texte en fonction d'une autre liste

LnV

XLDnaute Nouveau
Bonjour,

J'ai un code qui m'est donné sur plusieurs colonnes, et ce code a une signification qui est expliquée sur une autre feuille.
Je voudrais pouvoir afficher la signification de ce code de facon automatique.
Je joins un fichier d'explications.
Pourriez-vous m'aider svp ?


Merci d'avance !
 

Pièces jointes

  • Codes.xls
    15 KB · Affichages: 81
  • Codes.xls
    15 KB · Affichages: 75
  • Codes.xls
    15 KB · Affichages: 78

LnV

XLDnaute Nouveau
Re : Afficher un texte en fonction d'une autre liste

J'ai préparé la macro suivante :


Option Explicit

Sub Essai()

Dim CodeV As Range, CodeV2 As String
Dim CodeP As Range, CodeP2 As Range
Dim NomV As Range, NomV2 As Range
Dim RefV As Range, RefV2 As String
Dim NomP As Range, NomP2 As Range
Dim RefP As Range, RefP2 As Range
Dim Modele As Range, Modele2 As Range
Dim Piece As Range, Piece2 As Range

Set CodeV = Range("B11:B20")
Set CodeP = Range("C11:C20")
Set Modele = Range("D11:D20")
Set CodeP = Range("E11:E20")

For Each CodeV2 In CodeV
For Each RefV2 In RefV
If CodeV2 = RefV2 Then Print Modele2; "NomV2"

End Sub
 

Papou-net

XLDnaute Barbatruc
Re : Afficher un texte en fonction d'une autre liste

Bonjour LnV,

Essaies en modifiant le type des variables String en Range :

Code:
Sub Essai()

Dim CodeV As Range, CodeV2 As Range
Dim CodeP As Range, CodeP2 As Range
Dim NomV As Range, NomV2 As Range
Dim RefV As Range, RefV2 As Range
Dim NomP As Range, NomP2 As Range
Dim RefP As Range, RefP2 As Range
Dim Modele As Range, Modele2 As Range
Dim Piece As Range, Piece2 As Range

Set CodeV = Range("B11:B20")
Set CodeP = Range("C11:C20")
Set Modele = Range("D1120")
Set CodeP = Range("E11:E20")

For Each CodeV2 In CodeV
For Each RefV2 In RefV
If CodeV2 = RefV2 Then Print Modele2; "NomV2"
Next
Next

End Sub

et n'oublies pas les Next en fin de boucle.

Par ailleurs, tu n'as affecté aucune valeur à la variable RefV2 ?

Cordialement.
 

LnV

XLDnaute Nouveau
Re : Afficher un texte en fonction d'une autre liste

Salut,

Merci de ta réponse !
Il y a un problème au niveau du If : "la méthode ne fonctionne pas sans objet approprié".
J'ai aussi essayé avec des parenthèses.

Je ne comprens pas ta phrase "tu n'as affecté aucune valeur à la variable RefV2 "?
 

Papou-net

XLDnaute Barbatruc
Re : Afficher un texte en fonction d'une autre liste

Je ne comprens pas ta phrase "tu n'as affecté aucune valeur à la variable RefV2 "?

Bonjour LnV,

Je voulais écrire :

Code:
tu n'as affecté aucune valeur à la variable RefV

En effet, tu définis les zones de cellules dans les lignes suivantes :

Code:
Set CodeV = Range("B11:B20")
Set CodeP = Range("C11:C20")
Set Modele = Range("D1120")
Set CodeP = Range("E11:E20")

mais tu sembles oublier :

Code:
Set RefV = Range("???:???")

Même si, n'ayant pas le fichier sous les yeux, je ne comprends pas bien le but de ton programme, je pense que le rajout de cette ligne devrait supprimer l'erreur dans la condition If...Then.

Espérant voir répondu.

Cordialement.
 

LnV

XLDnaute Nouveau
Re : Afficher un texte en fonction d'une autre liste

AH !
Je crois que j'ai compris quelque chose : en fait le souci c'est que j'ai les catalogues et les codes sur deux feuilles différentes !!!
Mais comment spécifier ca dans la macro ?
 

Papou-net

XLDnaute Barbatruc
Re : Afficher un texte en fonction d'une autre liste

Euh... C'est ce que j'ai fait, regarde mon premier message, il y a un fichier joint

Au temps pour moi, j'avais zappé depuis hier.

Donc si j'ai bien compris le problème, voici la solution sur la copie de ton fichier.

Je suis resté dans ton optique de départ, mais si le résultat te convient, il y a matière à amélioration.

Cordialement.
 

Pièces jointes

  • Copie de Codes.xls
    26.5 KB · Affichages: 75

LnV

XLDnaute Nouveau
Re : Afficher un texte en fonction d'une autre liste

SUPEEER, merci !

Par contre, je n'ai pas compris :

1/ Comment tu définis 'cel' ? En effet je ne le vois nulle part.
2/ La ligne
Code:
Sheets("Codes").Cells(cel.Row, 4) = CodeV2.Offset(0, -1)
3/ La ligne
Code:
Sheets("Codes").Cells(cel.Row, 5) = CodeP2.Offset(0, -1)
4/ Les améliorations possibles ?
 

Papou-net

XLDnaute Barbatruc
Re : Afficher un texte en fonction d'une autre liste

SUPEEER, merci !

Par contre, je n'ai pas compris :

1/ Comment tu définis 'cel' ? En effet je ne le vois nulle part.
2/ La ligne
Code:
Sheets("Codes").Cells(cel.Row, 4) = CodeV2.Offset(0, -1)
3/ La ligne
Code:
Sheets("Codes").Cells(cel.Row, 5) = CodeP2.Offset(0, -1)
4/ Les améliorations possibles ?

La variable 'cel' est définie implicitement dans la boucle For Each cel in Sheets("Codes").Range("B11:B20")

Cette boucle lit les cellules les unes à la suite des autres dans la plage définie et affecte leur valeur à 'cel'.

Concernant les améliorations, une seule boucle est suffisante :

Code:
Sub Essai1()
With Sheets("Codes")
.Range("D11:E20").ClearContents
  For lg = 11 To 20
    Set cod_m = Sheets("Référence").Range("B:B").Find(.Cells(lg, 2), LookIn:=xlValues, lookat:=xlWhole)
    If Not cod_m Is Nothing Then .Cells(lg, 4) = cod_m.Offset(0, -1)
    Set cod_p = Sheets("Référence").Range("B:B").Find(.Cells(lg, 3), LookIn:=xlValues, lookat:=xlWhole)
    If Not cod_p Is Nothing Then .Cells(lg, 5) = cod_p.Offset(0, -1)
  Next
End With
End Sub

Espérant avoir répondu.

Cordialement.
 

LnV

XLDnaute Nouveau
Re : Afficher un texte en fonction d'une autre liste

Salut,

Merci beaucoup de ta réponse et respect !

Mais je ne comprends pas la syntaxe des lignes dont je t'ai parlé, ni ce aue font ces lignes :

Code:
If Not cod_m Is Nothing Then .Cells(lg, 4) = cod_m.Offset(0, -1)
    Set cod_p = Sheets("Référence").Range("B:B").Find(.Cells(lg, 3),

je voudrais comprendre les choses par moi-même plutot que de recopier :)
 

LnV

XLDnaute Nouveau
Re : Afficher un texte en fonction d'une autre liste

Re,

Je me suis replongé dans le code de la première macro, et je comprends tout hormis cette instruction :

Code:
.Cells(cel.Row,4)

quant à la deuxième macro, je n'en comprends pas encore le principe.

Pourriez-vous m'aider svp ?
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Afficher un texte en fonction d'une autre liste

Bonsoir LnV,

Je me suis replongé dans le code de la première macro, et je comprends tout hormis cette instruction :

Code :
.Cells(cel.Row,4)

Désigne la cellule de la feuille "Codes" située en colonne D (4) de la ligne correspondant à la cellule balayée dans la boucle 'For Each cel...Next'

Quant au principe de la 2ème macro, le voici :

Code:
Sub Essai1()
With Sheets("Codes") ' Toutes les références de cellules, précédées par un point, seront relatives à la feuille "Codes"
.Range("D11:E20").ClearContents ' Efface la plage "D11:E20" de la feuille "Codes"
  For lg = 11 To 20 ' Boucle balayant les lignes 11 à 20
    ' Recherche dans la colonne B de la feuille "Référence" si la valeur de la cellule B de la ligne en cours de lecture existe, et affecte le résultat à la variable cod_m
    ' Si cette valeur n"est pas trouvée, cod_m est vide
    Set cod_m = Sheets("Référence").Range("B:B").Find(.Cells(lg, 2), LookIn:=xlValues, lookat:=xlWhole)
    ' Si cette valeur est trouvée (cod_m non vide), on copie la valeur de la cellule située immédiatement à gauche (colonne A) dans la cellule D (4) de la ligne en cours d'analyse sur la feuille "Codes"
    ' Démarche identique aux 2 lignes précédentes
    If Not cod_m Is Nothing Then .Cells(lg, 4) = cod_m.Offset(0, -1)
    Set cod_p = Sheets("Référence").Range("B:B").Find(.Cells(lg, 3), LookIn:=xlValues, lookat:=xlWhole)
    If Not cod_p Is Nothing Then .Cells(lg, 5) = cod_p.Offset(0, -1)
  Next
End With
End Sub

J'espère avoir été assez précis. Dans le cas contraire, n'hésites pas de ton côté à consulter l'aide de VBA.

Cordialement.
 

Discussions similaires

Réponses
8
Affichages
251

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 017
dernier inscrit
annboi19