Correspondance liste plan

Le
JulieH
Bonjour à toutes et tous,

Dans un fichier, j'ai 2 feuilles (Pour faire simple, je vais prendre
l'exemple d'élèves) :
Dans la première (BdeD), j'ai une liste de noms en colonne A (longueur
indéfinie) et un numéro de bureau en colonne B.
Dans la seconde (Plan), j'ai une sorte de plan avec les N° de bureaux.
Comme il y en a un peu partout, j'ai défini un Nom avec une plage
discontinue (ListeTables ='Plan de la salle'!$B$2:$AA$2;'Plan de la
salle'!$B$4:$AA$4

Ce que je souhaite faire en VBA :
Parcourir toutes les cellules de la "ListeTables", chaque fois que la
macro trouve le même numéro dans la "BdeD", mettre sur le plan le nom
d'élève correspondant(le mettre dans la cellule en dessous du numéro de
bureau).
Toutes les cellules de mon plan, n'ont pas forcément un nombre
correspondant dans la BdeD.

Merci pour vos idées.

Julie
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
francois.forcet
Le #5428201
Salut Julie
Espérant avoir bien compris ton attente
soit feuil1 colonne A les noms colonne B les numéros
soit feuil2 de B2 à AA4 les numéros

je te propose ce code :

For Each c In Worksheets("Feuil2").Range("B2", "AA4")
Sheets("Feuil1").Activate
Range("B1").Activate
On Error Resume Next
Range("B1", "B" & Range("B65535").End(xlUp).Row).Find(What:=c,
After:=Range("B1"), LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:= _
xlNext, MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> Range("B1").Address Then
c.Offset(1, 0) = Range("A" & ActiveCell.Row)
End If
Next

le nom en feuil2 en dessous du numéro

Celà devrait te convenir
Dis moi !!!!!
JulieH
Le #5428171
Bonjour et merci pour ta réponse,

Je ne suis pas sùre de m'être bien expliquée. En tous les cas, je ne
m'en sors pas avec ton code.
J'ai mis un exemple simplifié sur Cjoint.

Julie


http://cjoint.com/?dFolwM6nt5

Salut Julie
Espérant avoir bien compris ton attente
soit feuil1 colonne A les noms colonne B les numéros
soit feuil2 de B2 à AA4 les numéros

je te propose ce code :

For Each c In Worksheets("Feuil2").Range("B2", "AA4")
Sheets("Feuil1").Activate
Range("B1").Activate
On Error Resume Next
Range("B1", "B" & Range("B65535").End(xlUp).Row).Find(What:=c,
After:=Range("B1"), LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:= _
xlNext, MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> Range("B1").Address Then
c.Offset(1, 0) = Range("A" & ActiveCell.Row)
End If
Next

le nom en feuil2 en dessous du numéro

Celà devrait te convenir
Dis moi !!!!!


francois.forcet
Le #5428101
Rebonjours Julie

Tes explications étaient parfaites
Je les avais bien cernées
Il fallait seulement bien adapter mon code en fonction de ton document
(Nom onglet, colonnes concernées)
Et tout baigne je pense
Ci-joint ton document corrigé avec ma Macro "Traitement"

http://www.cijoint.fr/cjlink.php?file=cj200803/cij1JEl98Q.xls.

Donnes moi ton sentiment !!!!
JB
Le #5428011
Bonjour,

Pourquoi VBA?

=SI(ESTNA(EQUIV(B2;Bureau;0));"";INDEX(Noms;EQUIV(B2;Bureau;0)))

JB



On 31 mar, 14:13, JulieH
Bonjour et merci pour ta réponse,

        Je ne suis pas sùre de m'être bien expliquée. En tou s les cas, je ne
m'en sors pas avec ton code.
        J'ai mis un exemple simplifié sur Cjoint.

Julie

http://cjoint.com/?dFolwM6nt5




Salut Julie
Espérant avoir bien compris ton attente
soit feuil1 colonne A les noms colonne B les numéros
soit feuil2 de B2 à AA4 les numéros

je te propose ce code :

For Each c In Worksheets("Feuil2").Range("B2", "AA4")
Sheets("Feuil1").Activate
Range("B1").Activate
On Error Resume Next
Range("B1", "B" & Range("B65535").End(xlUp).Row).Find(What:=c,
After:=Range("B1"), LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:= _
        xlNext, MatchCase:úlse, SearchFormat:úlse).Activ ate
If ActiveCell.Address <> Range("B1").Address Then
c.Offset(1, 0) = Range("A" & ActiveCell.Row)
End If
Next

le nom en feuil2 en dessous du numéro

Celà devrait te convenir
Dis moi !!!!!- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



JulieH
Le #5427981
Effectivement, c'était parfait et surtout beaucoup plus rapide que ce
que j'avais imaginé (2 for each consécutifs).

Si je peux te déranger encore un peu, je souhaiterais mettre une option
supplémentaire :
Dans la colonne suivante, en face chaque nom, j'ai un code : A, B, C, D.
J'aimerais que dans le plan, le fond de la cellule soit en couleur
(rouge si A, bleu si B...).

Encore merci pour l'aide.

Julie

Rebonjours Julie

Tes explications étaient parfaites
Je les avais bien cernées
Il fallait seulement bien adapter mon code en fonction de ton document
(Nom onglet, colonnes concernées)
Et tout baigne je pense
Ci-joint ton document corrigé avec ma Macro "Traitement"

http://www.cijoint.fr/cjlink.php?file=cj200803/cij1JEl98Q.xls.

Donnes moi ton sentiment !!!!


JulieH
Le #5427971
Bonjour et merci pour ta réponse,

Evidemment c'est plus simple. Mais je dois également faire des mises en
forme (plus de 3). Voir mon dernier message.
Alors, j'avais pensé tout faire en VBA.

A bientôt

Julie



Bonjour,

Pourquoi VBA?

=SI(ESTNA(EQUIV(B2;Bureau;0));"";INDEX(Noms;EQUIV(B2;Bureau;0)))

JB



On 31 mar, 14:13, JulieH
Bonjour et merci pour ta réponse,

Je ne suis pas sùre de m'être bien expliquée. En tous les cas, je ne
m'en sors pas avec ton code.
J'ai mis un exemple simplifié sur Cjoint.

Julie

http://cjoint.com/?dFolwM6nt5




Salut Julie
Espérant avoir bien compris ton attente
soit feuil1 colonne A les noms colonne B les numéros
soit feuil2 de B2 à AA4 les numéros
je te propose ce code :
For Each c In Worksheets("Feuil2").Range("B2", "AA4")
Sheets("Feuil1").Activate
Range("B1").Activate
On Error Resume Next
Range("B1", "B" & Range("B65535").End(xlUp).Row).Find(What:=c,
After:=Range("B1"), LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:= _
xlNext, MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> Range("B1").Address Then
c.Offset(1, 0) = Range("A" & ActiveCell.Row)
End If
Next
le nom en feuil2 en dessous du numéro
Celà devrait te convenir
Dis moi !!!!!- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -







francois.forcet
Le #5427941
Rebonjours à toi
Heureux que celà te convienne

Pour ta demande supplémentaire correspondant à la couleur de fond des
cellules de chaque Nom ramené Onglet "Plan de la salle" je te propose
le code modifié ainsi :

For Each c In Worksheets("Plan de la salle").Range("B2", "AA4")
Sheets("Liste").Activate
Range("F4").Activate
On Error Resume Next
Range("F4", "F" & Range("F65535").End(xlUp).Row).Find(What:=c,
After:=Range("F4"), LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:= _
xlNext, MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> Range("F4").Address Then
c.Offset(1, 0) = Range("G" & ActiveCell.Row)
If Range("H" & ActiveCell.Row) = "A" Then
c.Offset(1, 0).Interior.ColorIndex = 3
End If
If Range("H" & ActiveCell.Row) = "B" Then
c.Offset(1, 0).Interior.ColorIndex = 5
End If
End If
Next

J'ai rajouté les lignes :

If Range("H" & ActiveCell.Row) = "A" Then
c.Offset(1, 0).Interior.ColorIndex = 3
End If
If Range("H" & ActiveCell.Row) = "B" Then
c.Offset(1, 0).Interior.ColorIndex = 5
End If

pour les codes A et B

Tu peux continuer à l'identique pour les codes suivants
Pour connaître le code de la couleur souhaitée utilise cette ligne
dans une macro aprés avoir coloré une cellule avec cette couleur en la
maintenant active :

MsgBox (ActiveCell.Interior.ColorIndex)

Sur ce lien ton document modifié

http://www.cijoint.fr/cjlink.php?file=cj200803/cijQ3Ahn2t.xls.

Donne moi ton avis !!!!
JulieH
Le #5427911
Tout fonctionne parfaitement. Merci à nouveau.

Julie

Rebonjours à toi
Heureux que celà te convienne

Pour ta demande supplémentaire correspondant à la couleur de fond des
cellules de chaque Nom ramené Onglet "Plan de la salle" je te propose
le code modifié ainsi :

For Each c In Worksheets("Plan de la salle").Range("B2", "AA4")
Sheets("Liste").Activate
Range("F4").Activate
On Error Resume Next
Range("F4", "F" & Range("F65535").End(xlUp).Row).Find(What:=c,
After:=Range("F4"), LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:= _
xlNext, MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> Range("F4").Address Then
c.Offset(1, 0) = Range("G" & ActiveCell.Row)
If Range("H" & ActiveCell.Row) = "A" Then
c.Offset(1, 0).Interior.ColorIndex = 3
End If
If Range("H" & ActiveCell.Row) = "B" Then
c.Offset(1, 0).Interior.ColorIndex = 5
End If
End If
Next

J'ai rajouté les lignes :

If Range("H" & ActiveCell.Row) = "A" Then
c.Offset(1, 0).Interior.ColorIndex = 3
End If
If Range("H" & ActiveCell.Row) = "B" Then
c.Offset(1, 0).Interior.ColorIndex = 5
End If

pour les codes A et B

Tu peux continuer à l'identique pour les codes suivants
Pour connaître le code de la couleur souhaitée utilise cette ligne
dans une macro aprés avoir coloré une cellule avec cette couleur en la
maintenant active :

MsgBox (ActiveCell.Interior.ColorIndex)

Sur ce lien ton document modifié

http://www.cijoint.fr/cjlink.php?file=cj200803/cijQ3Ahn2t.xls.

Donne moi ton avis !!!!


Publicité
Poster une réponse
Anonyme