Commande Find ou Intersect / Excel

Fermé
Vidocq - 20 févr. 2008 à 20:13
 Vidocq - 24 févr. 2008 à 23:47
Bonjour,
Je suis un nouveau venu mais lecteur assidu de vos lignes.
Je fais appel aux bons soins des acteurs du forum par un manque cruel de connaissances. Je réalise en ce moment un projet de gestion des plannings du personnel pour une utilisation pour l'instant privée mais qui pourra s'étendre à d'autres unités.
J'ai déjà une première version de cette feuille de calcul qui tourne pas trop mal, mais je souhaite encore améliorée les fonctionnalités de l'outils, et c'est là que je me heurte à des problèmes de syntaxe en VisualB.

description

Lorsque j'entre un personnel nouveau dans la feuille "perso", je crée automatiquement une plage de cellules nommée sur la feuille "cycles", et une seconde en transposé sur une feuille de calcul.

Dans la feuille cycles je spécifie grace à une mise en forme des cellules gérer par des boutons, le rythme de travail et le poste occupé.

dans une troisiéme feuille "base", je me retrouve avec en col A mon perso (cette liste peut etre agrandie uniquement sur cette page) en ligne pour entete de planning, des semaines consécutives décomposée de comme suit:

lg1 " MOIS" " MOIS" " MOIS " .....
lg2 (listebox) 1 2 3 ......
lg3 L m m j v s d l m m j v s d l m m j v s d .......
lg4 x x x x x x x x x x x x x x x x x x x x x
WWWW
nom
nom
nom
VVVVV
nom
nom
nom
.........
Ma liste box contient les dates calculées automatiquement en fonction du nombre de semaines de cycles déterminée
sur une autre page, les cellules MOIS et X Sont donc calculée en fonction de la date de cette liste box.

Je peut donc obtenir Visuellemnt la reproduction itérative des cycles pour toute l'année.
grace a une inpoutbox accessible depuis les feuilles de chaques mois, l'utilisateur choisi la plage de cellule qui l'interesse, les cellules sont copiées et collées dans la la feuille Mois d'ou l'appel de procédure à été fait.

tout cela reste .......trés moyen.

Je souhaite donc utilisée mon autre feuille de calcul, qui recense tout les salariés et tous les jours,
Dates Semaines
Année Cycles Nom nom nom nom nom nom nom
x 1
x
x
x
x 2
x
x
x
x
x 3
x
x
x
x
Je voudrais donc crée une procédure qui me permette de remplir ce tableau annuel, pour ensuite envoyer les infos vers les mois.

mes plages nommées sont pour chaques personnes nom_annee plage verticale feuille de calcul
nom_cycles, plage horizontal sur la feuille Cycles, et bien sur la plage de toputes les cellules en face des dates dans la feuille de calcul.

Premiérement, la méthode est elle judicieuse???????
deuxiémement, j'ai tenté de cherche l'intersection des plages pour copier les cellules à la bonne place....en vain, et enfin d'utiliser la commande Find pour trouver les coordonnées des cellules. La encore en vain


voici les bouts de code qui me font tourner en rond


Dim i As Integer
Dim nbj As Integer
Sheets("CYCLES.").Select
Range("A9").Select
nbj = ActiveCell.Value * 7

Sheets("Base.").Select
Dim Monperso As Range
Set Monperso = [A11:A132].SpecialCells(xlCellTypeConstants, 2)

Monperso.Select
For Each Cel In Selection
For i = 1 To nbj

ActiveCell.Offset(O, i).Select

For Each C In Selection
C.Copy

Dim Nom As String
Nom = Range("A" & ActiveCell.Row).Value

Dim Madate1 As String
Madate1 = C(10, i + 1).Value
Application.Goto Reference:="bd_dates"

For Each Cell In Selection
If Cell.Value = Madate1 Then

Cell.Select

Dim a As String
a = ActiveCell.Row
Application.Goto Reference:=Nom & "_annee" 'LA CA BLOQUE
Dim b As String
b = ActiveCell.Column
Range(ab).Select
ActiveSheet.Paste
End If
Next

Next
Next
Next
End Sub
et la deuxiéme options qu'il faudra que j'applique a chaque cellules

Dim Nom As String
Dim madate As String
Dim col As Range
Dim lig As Range

Nom = Range("A" & ActiveCell.Row).Value
madate = Range("B10").Value
ActiveCell.Copy
Sheets("LISTE").Select
Set col = ActiveSheet.Range("F4:IV4").Find(Nom)
Set lig = ActiveSheet.Range("D15:D548").Find(madate)
If (col Is Nothing Or lig Is Nothing) Then
Exit Sub 'Exit à chaque fois !!!!
Else
Sheets("LISTE").Cells(lig.Row, col.Column).Select
End If

End Sub


Je ne suis dans l'unvivers du codage que depuis deux semaines veuillez excuser ma synthaxe.

En espérant pouvoir trouver un peu d'aide amicalement.SP
A voir également:

5 réponses

up
0
..up
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
23 févr. 2008 à 09:24
Bonjour,

Je ne suis pas sûr d'avoir vraiment compris ton besoin mais tu as INTERSECT(plage1,plage2).
Tu as également le caractère espace qui est l'opérateur d'intersection.

eric
0
Je ne trouve pas comment rédiger la commande Intersect pour deux plage nommées.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
23 févr. 2008 à 21:40
Soit en lui passant directement les noms:
Dim a As Range
Set a = Intersect(Range("nom1"), Range("nom2"))
MsgBox (a.Value)

soit par l'intermédiaire de variables:
Dim a As Range, b As String, c As String
b = "nom1"
c = "nom2"
Set a = Intersect(Range(b), Range(c))
MsgBox (a.Value)

Premiérement, la méthode est elle judicieuse???????
Nommer les cellules et les plages est très bien sur une feuille et est plus parlant, mais en vba ce n'erst pas forcément la méthode la plus simple ni la plus souple.
Niomme juste la cellule en haut à gauche de ton tableau 'tableToto' par exemple, et à partir de là utilise la propriété offset(ligne,colonne) pour t'adresser à une celulle décalée.
range("tableToto").offset(5,3).value = 8 te met 8 à 5 lignes plus bas et 3 colonnes à droite.
tu as aussi cells(6,2) qui t'adresse à la cellule B6

bonne continuation
eric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
OK merci pour, le cour de rédaction, mais tout bien réfléchi cela ne pourra pas marcher avec intersect, étant donnée qu ma plage principale s'étend sur toute l'années les intersection sont aussi nobreuses que le nombres de jours plus 400 cellules..... cela ne pouvait pas fonctionner. Donc je vais tenter de rester sur le la commande Find, (la date dans la colonne: récupére la ligne) find (le nom dans ligne 1, récupére la colonne) et trouve la cellule "find:find"

J'ai utilisé find dans un autre projet que je termine et là ca a fonctionne donc je devrais m'en sortir pour 9A, en revanche il faut que j'opére cette recherche pour tous les jours d'un mois et ce pour 30 personnes.

Ce qui nous donne quelquechose qui pour moi tourne en carré,
du genre

Dim x as Range
Dim y as range
Dim u as Range
Dim v as range
Dim W as range
Dim nom as string
Dim date as date

Sheets"mafeuille".Select
For Each Cell in Maplage (plage discontinue)
set x = ActiveCell
x.copy
nom= range("A" & x.rows).Value
date= range(x.columns &"4")
sheets "mafeuille2".Select
Set U = range("a"&"range A6.Endxltoright.find(nom).rows)
set v = range(maplage2.find(date)&"(5))
set w = range(v.Rows, u.columns)
W.Select
Activsheet.paste
(je comprend bien que ce code est totalement improbable, et c'est là mon probléme)

Surtout que mem si j'y arrive il faudrait que je repete cette manip pour chaque jour et chaque personne, soit plus de
750 fois, dans un sens, puis dans un autre pour envoyer l'info vers les feuilles de chaque mois, et ce à chaque modifications....

D'ou ma question initiale, est ce qu'il faut vraiment que je continue à essayer de trouver la bonne synthaxe de cette boucle, ou bien que je reprenne le projet à la base, et que j'organise mes pages différements. Il y a des fonctions que je ne connait pas et qui rendrait certainement ce travail beaucoup plus simple.

Mon Secon projet étant abouti je reprend celui là de pied ferme dés demain. Merci à ceux qui auraitedes propositions
0