Bonsoir Guillaume, bonsoir à toutes et à tous
🙂
Guigui écrit:
Peux tu m'expliquer un peu le code, car j'ai quelque modif a faire et je ne sais pas ou lesfaire exactement, par exemple,
les nom des qualifs n'est pas en colonne C mais A, et je ne sais pas ou modifier ceci,
En allant sous VBE, tu cherches le module de classe
ClasseDeDonnees dans
VBAProject, tu y trouveras la définition et les méthodes de cette classe.
[ul]Les méthodes :
[li]->
LitDonnees (
Plage As Range)
cette méthode va lire les données de Plage et les stocker dans un tableau. Comme
Plage est un objet Range, tu peux très bien indiquer une autre feuille en appelant la méthode ainsi :
LitDonnees Sheets(
TaFeuille).Range(
TonTableau)
Je n'ai pas appelé cette méthode car j'ai prévu la possibilité d'un appel direct à la méthode suivante :
TraiteDonnees() qui, en cas d'absence d'appel à
LitDonnees, l'effectue elle-même avec une plage par défaut (celle de ton exemple).
Tu peux donc appeler
LitDonnees avec la plage de ton tableau.[/li]
[li]->
TraiteDonnees()
Bon, puisque ton tableau n'est plus tout à fait organisé de la même façon, il va peut-être falloir que tu retrousses tes manches
😉.
Dans un premier temps, modifie l'appel par défaut à la méthode
LitDonnees (à voir au début de la procédure) :
If IsEmpty(.TabInit)
Then
Me.LitDonnees Range('A1:C' & Range('C65536').End(xlUp).Row)
End If
soit en remplaçant la plage par défaut en fonction de ton tableau, soit en prévoyant un message si la variable
TabInit n'a pas été initialisée.
Le travail principal de cette méthode se fait dans ces quelques instructions :[/li]
Do While .i ‹ .IndiceSup
.i = .i + 1
If .TabInit(.i, 1) = '' Then
Select Case UCase(.TabInit(.i, 3))
Case cIdTxtP
RangeDonnees ('P')
Case cIdTxtPB
RangeDonnees ('PB')
Case cIdTxtHS
RangeDonnees ('HS')
End Select
End If
Loop
[li]Là, on va chercher les cellules vides en colonne 1 (A) pour lesquelles la colonne 3 contient une donnée (AGENTS DE PISTE, etc.) et en fonction de cela, on appelle la procédure privée
RangeDonnees avec comme paramètre l'ID d'équivalence.
Lorsqu'elle rend la main, la variable i pointe sur la première ligne vide après les noms qu'elle a rangé dans un tableau (l'équivalent de ton tableau récapitulatif), ou sur la fin du tableau.
C'est donc cette partie qui est à modifier si tes informations ne sont pas en colonne C comme dans ton exemple.[/li]
[li]->
RangeResultats(FirstCell
As Range)
Je pense que les noms sont assez explicites :huh: . C'est cette méthode qui va placer les résultats (le tableau final mais sans formatage des cellules) à partir de la cellule passée en paramètre.
C'est la même chose que pour
LitDonnees, tu peux très bien y placer l'adresse de la
cellule haut gauche de ton tableau où qu'il soit dans le classeur (si tu ne préfixes pas la cellule, ce sera la feuille active).[/li]
La propriété :lol: :
[li]->
TableauResultat
C'est un tableau de chaînes de caractères (String).[/li][/ul]
Guigui écrit:
Autre chose, si je veut que le nouveaux tableau soit crée dans un nouveau fichier,je pense connaitre la syntaxe, mais ou la placer dans ton code ?
Là, je pense avoir répondu dans l'explication de la méthode
RangeResultats 😛
Guigui écrit:
Derniere chose, un agents malgrés qu'il soit dans un groupe 'piste', pusheurs ou casque, peut avoir les 3 qualif en meme temps, je vais donc inserer une autre feuille avec la liste des agents et toutes leur qualifs
ex:
Toto : PB, HS, P
Tata : PB, HS
est ce qu'un code recherche (du nom) et copier la ligne correspondante (avec les qualifs) suffirait ?
Naturellement, tu peux prévoir un tel code qui ressemblerait à un INDEX / EQUIV ou RECHERCHEV.
Voilà, j'espère ne pas avoir été trop lourd. Fais un copier/coller et lit ça à tête reposée :silly:
A+
😉
Message édité par: Charly2, à: 29/03/2006 21:51