Boucles If imbriquées basées sur deux feuilles différentes

Mathilde04

XLDnaute Nouveau
Bonjour

J'aimerais réaliser 2 boucles imbriquées sur deux feuilles différentes. Je m'explique, j'aimerais que sur la feuille "Projet", si l'information de la colonne B (à partir de la cellule B5 jusque B500) = une des valeurs de la colonne B de la feuille "aide" (entre la cellule B4 et B56) alors que la valeur de la colonne C (à partir de la cellule C5 jusque C500) de la feuille "Projet" soit égale à celle de la colonne A de la feuille "Aide" correspondant à la ligne de la colonne B identique. Voici un exemple: j'aimerais que les valeurs : tableau 1, tableau 6 et tableau 5 de la feuille Projet s'inscrivent automatiquement car France, Allemagne et Suisse interviennent dans la feuille Projet et Aide

Feuille "Projet"

France Tableau1
Allemagne tableau6
Suisse Tableau5


Feuille "Aide"
France tableau1
Italie tableau2
Espagne tableau3
Belgique tableau4
Suisse tableau5
Allemagne tableau6

Je ne vois pas trop comment m'y prendre...Merci de votre aide!
 

Dranreb

XLDnaute Barbatruc
Re : Boucles If imbriquées basées sur deux feuilles différentes

Bonjour.
Il vaut mieux éviter deux boucles imbriquées pour ce genre de choses.
Il est préférable d'utiliser un Dictionary pour retrouver la ligne où se trouve une info selon une identification.
 

thebenoit59

XLDnaute Accro
Re : Boucles If imbriquées basées sur deux feuilles différentes

Si tu souhaites ne passer que par VBA, la réponse de Dranreb est excellente pour ton fichier.
Une variante peut-être la suivante :

Code:
Sub Test()
Dim f1 As Worksheet, f2 As Worksheet
Set d = CreateObject("Scripting.Dictionary")
Set f1 = Worksheets("Projet")
Set f2 = Worksheets("Aide")

    For Each Cell In f2.Range("B4:B500")
        If Cell <> "" Then d(Cell.Value) = Cell.Offset(, -1).Value2
    Next Cell

    For Each Cell In f1.Range("B4:B500")
        If Cell <> "" Then Cell.Offset(, 1).Value = d(Cell.Value)
    Next Cell

End Sub

On crée un Dictionary avec comme clé le nom du pays de la feuille Aide et comme Item le nom du tableau.
Sur la feuille Projet, on boucle les valeurs en B comme clé, et on inscrit l'item en colonne C.
 

Pièces jointes

  • Mathilde04 - Boucles If imbriquées basées sur deux feuilles différentes.xlsm
    16.2 KB · Affichages: 17

Mathilde04

XLDnaute Nouveau
Re : Boucles If imbriquées basées sur deux feuilles différentes

Merci de la réponse si rapide!
Le fichier que j'ai posté est un fichier exemple qui est simplifié par rapport à mon fichier réel.
comment faire si je veux maintenant faire une macro qui dit que cette formule doit être appliquée pour toutes les cellules de la colonne B de la feuille Projet (de la colonne B5 à B500). en mettant seulement un for i =5 to 500 cela ne marche pas...


For i = 5 To 500
cells(i,3)=index(Aide!cells(4,1):cells(9,2));EQUIV(B4;Pays;0);1)
End Sub
 

thebenoit59

XLDnaute Accro
Re : Boucles If imbriquées basées sur deux feuilles différentes

Si tu utilises du VBA il faut récupérer la proposition de Dranreb.
Remplacer la plage par la tienne :
Code:
Feuil1.[C5:C500].FormulaR1C1 = "=OFFSET(Pays,MATCH(RC2,Pays,0)-1,-1,1,1)"

Mais si tu ne souhaites pas afficher de formules, regarde la proposition avec Dictionary.
Ca sera plus rapide en exécution.
 

Dranreb

XLDnaute Barbatruc
Re : Boucles If imbriquées basées sur deux feuilles différentes

VB:
Sub Tableau()
With Feuil1.[C5].Resize(Feuil1.[B5000].End(xlUp).Row - 4)
   .FormulaR1C1 = "=OFFSET(Pays,MATCH(RC2,Pays,0)-1,-1,1,1)"
   .Value = .Value
   End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 490
Messages
2 088 883
Membres
103 981
dernier inscrit
vinsalcatraz