Base de donnée volontaires à répartir

Luke91

XLDnaute Nouveau
Bonjour à vous !!

Je ne vais pas être très original ... j'ai besoin d'un coup de main .

Dans un cadre associatif, j'ai une base de donnée de volontaires. Ma mission est d'appeler les volontaires sélectionnés par mes responsables - "Ficher des volontaires" - pour savoir s'ils seraient présents pour un événement. Le mode de contact est uniquement le mail avec ces volontaires.

Dans mon premier onglet " Fichier des volontaires", se trouvent toutes les coordonnées des volontaires ainsi que pleins d'informations les concernant. Je ne peux pas faire un formulaire à compléter puisque, avec le temps, on va ajouter et retirer des critères. C'est un peu une fiche de renseignement détaillée.
En cours d'année, je devrai rajouter manuellement (en rajoutant une ligne ?) de nouveaux volontaires.
Dans cet onglet, une fois que mes responsables ont mis " APPEL" dans la colonne "Visa du chef", il faudrait que tous les noms qui ont ce "visa" soient copiés automatiquement dans l'onglet " Etat des inscriptions 2021" à l'endroit "personne en attente de réponse".
La particularité c'est qu'il faudrait que cela s'actualise automatiquement car, comme je l'ai dit plus haut, parfois je devrai rajouter des noms en cours d'année, et il faudrait que cela se copie également dans cet onglet si mon responsable met "APPEL". Vous l'aurez compris, je dois évidemment rappeler ces nouveaux qui se présenteront ...

Après, dans un deuxième temps, quand j'ai ma liste actualisée des personnes à appeler, je leur envoie un mail, et s'il ne répondent pas je dois faire des relances tant que je n'ai pas un "oui" ou un "non" de leur part. Au total j'effectuerai 3 relances au maximum.
La particularité : c'est qu'il faudrait que s'il me répondent "oui" dans une des cases réponses (quelque soit la "relance") leur ligne se déplace ensuite dans la partie "ACCEPTE". De même s'ils me disent "non", il faudrait que cela aille dans la partie "REFUS" de cet onglet. Vous comprenez qu'il faut que je puisse voir facilement l'état des relances et n'avoir au fur et à mesure que les gens qui n'ont pas répondu.
Cependant, "travaillant" avec des bénévoles, leur disponibilité change parfois. Aussi, même s'ils disent qu'ils acceptent, parfois 24h avant, ils se désistent. Il faudrait pouvoir les refaire passer d'un stade " ACCEPTE" au stade "REFUS" et inversement parfois du stade de "REFUS" à celui de " ACCEPTE".
Oui je sais, la tache est ardue ....

Enfin, dans un troisième onglet ("Effectif réel 2021) , il faudrait que je puisse avoir la liste des noms et prénoms de ceux qui ont accepté. Vous comprenez qu'il faut que cela s'actualise avec l'onglet 2 qui lui même s'actualise de l'onglet 1 ...
Concernant ce 3ème Onglet, une fois que j'ai les noms et prénoms, je pense qu'une simple fonction RECHERCHEH me permettra de retrouver les critères ( de l'onglet "Fichier des volontaires") qui me seront alors nécessaires. Parce qu'en plus, sur cet onglet, je devrai entrer en manuel des informations quant à leur heure d'arrivée personnalisée, leur heure de départ personalisée, leur lieu d'hébergement etc...

Et oui ... tout ça dans un cadre associatif !! Donc on s'amuse bien ... cependant, je suis un peu dépassé avec les lignes de codes qui ne sont pas du tout de mon domaine. Je suis conscient qu'il s'agit d'un vrai défi quand à la réalisation de ce document... mais je tente et j'espère que des experts pourront m'aider ...

en tout cas, je vous en remercie par avance.

Luke

PS : En PJ le document
 

Pièces jointes

  • Base de donnée des volontaires.xlsx
    13.8 KB · Affichages: 9

tomocam

XLDnaute Nouveau
Bonjour Luke,

Voilà un sujet intéressant :)
Tout ce que vous souhaitez peut être réglé par des macros.

Pour pouvoir vous aider, pouvez-vous nous préciser:
> Votre niveau de connaissance des macros excel
> Est-ce que le tableau "personnes en attente de réponse" reste complété une fois que quelqu'un a répondu ou doit-il être vidé ?
> Il est possible de faire les modifications de manière dynamique (lorsque le contenu d'une cellule est modifié) mais cela peut à la longue devenir lourd d'utilisation (imaginez un fichier excel qui "rame" pendant 2 secondes chaque fois que vous cliquez sur une cellule). Je vous recommande plutôt de passer par un bouton qui mettra à jour le tableau au clic

Tomo
 

tomocam

XLDnaute Nouveau
Bonjour Luke,

Ci-joint le fichier avec quelques changements de structure (j'ai dû mettre les tableaux du 2eme onglet côte à côte pour éviter les chevauchement)

Ci-dessous le code que je vous laisserai décortiquer (j'ai ajouté des annotations pour faciliter la lecture)

Pour ajouter un bouton, il suffit d'activer le menu "développeur" et de faire insérer > Bouton puis clic droit sur le bouton et "affecter une macro"

VB:
Sub MAJ()

Dim wb_waat As String
Dim r, a, b As Long

wb_waat = ActiveWorkbook.Name

'vérifier chaque ligne du tableau fichier des volontaires
r = 16
'calcul du premier numéro de ligne vide dans le tableau "Personnes en attente de réponse"
a = Application.WorksheetFunction.CountA(Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Columns(2)) + 7

Do While Workbooks(wb_waat).Sheets("Fichiers des volontaires").Cells(r, 4).Value <> ""
On Error Resume Next

'si la colonne B contient le mot APPEL, copier les données dans l'onglet Etat des inscriptions 2021

    If Workbooks(wb_waat).Sheets("Fichiers des volontaires").Cells(r, 2).Value = "APPEL" Then
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Cells(a, 2).Value = Workbooks(wb_waat).Sheets("Fichiers des volontaires").Cells(r, 4).Value
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Cells(a, 3).Value = Workbooks(wb_waat).Sheets("Fichiers des volontaires").Cells(r, 5).Value
'on supprime "APPEL" de la colonne B
        Workbooks(wb_waat).Sheets("Fichiers des volontaires").Cells(r, 2).ClearContents
        r = r + 1
        a = a + 1
'sinon, on passe à la ligne suivante
    Else
    r = r + 1
    End If
'on boucle pour passer à la ligne suivante
Loop

'2ème partie - copier dans accepte ou refus

r = 9
'calcul du premier numéro de ligne vide dans le tableau "ACCEPTE"
a = Application.WorksheetFunction.CountA(Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Columns(13)) + 7
'calcul du premier numéro de ligne vide dans le tableau "REFUS"
b = Application.WorksheetFunction.CountA(Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Columns(18)) + 7

Do While Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Cells(r, 2).Value <> ""
On Error Resume Next

'vérifie si une des 4 cases réponses contient "OUI"
    If Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Cells(r, 5).Value = "OUI" Or Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Cells(r, 7).Value = "OUI" Or Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Cells(r, 9).Value = "OUI" Or Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Cells(r, 11).Value = "OUI" Then

'si c'est le cas, copie dans la colonne "accepte"
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("M" & a).Value = Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("B" & r).Value
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("N" & a).Value = Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("C" & r).Value
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("O" & a).Value = "X"
'et supprime du tableau "personnes en Attente de réponse"
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range(Range("B" & r), Range("K" & r)).Delete Shift:=xlUp
        r = r + 1
        a = a + 1
    
'sinon vérifie que une des 4 cases réponses contient "NON"
    ElseIf Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Cells(r, 5).Value = "NON" Or Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Cells(r, 7).Value = "NON" Or Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Cells(r, 9).Value = "NON" Or Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Cells(r, 11).Value = "NON" Then

'si c'est le cas, copie dans la colonne "REFUS"
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("R" & b).Value = Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("B" & r).Value
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("S" & b).Value = Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("C" & r).Value
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("T" & b).Value = "X"
'et supprime du tableau "personnes en Attente de réponse"
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range(Range("B" & r), Range("K" & r)).Delete Shift:=xlUp
        r = r + 1
        b = b + 1
    Else
'sinon passe à la ligne suivante
    r = r + 1
    End If
Loop
    
    
'3ème partie en cas de changement dans les tableaux ACCEPTE ou REFUSE

r = 9
'calcul du premier numéro de ligne vide dans le tableau "ACCEPTE"
a = Application.WorksheetFunction.CountA(Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Columns(13)) + 7
'calcul du premier numéro de ligne vide dans le tableau "REFUS"
b = Application.WorksheetFunction.CountA(Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Columns(18)) + 7

'on boucle sur le tableau "ACCEPTE"

Do While Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("M" & r).Value <> ""
On Error Resume Next

'si la case n'est plus cochée
    If Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("O" & r).Value <> "X" Then

'copier la ligne dans "REFUS"
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("R" & b).Value = Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("M" & r).Value
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("S" & b).Value = Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("N" & r).Value
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("T" & b).Value = "X"

'et la supprimer du tableau "ACCEPTE"
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range(Range("M" & r), Range("O" & r)).Delete Shift:=xlUp
        r = r + 1
        b = b + 1

'sinon on passe à la ligne suivante
        Else
        r = r + 1
    End If
Loop

'on boucle sur le tableau "REFUS"

r = 9
Do While Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("R" & r).Value <> ""
On Error Resume Next

'si la case n'est plus cochée
    If Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("T" & r).Value <> "X" Then

'copier la ligne dans "ACCEPTE"
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("M" & a).Value = Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("R" & r).Value
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("N" & a).Value = Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("S" & r).Value
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range("O" & a).Value = "X"

'et la supprimer du tableau "ACCEPTE"
        Workbooks(wb_waat).Sheets("Etat des Inscriptions 2021").Range(Range("R" & r), Range("T" & r)).Delete Shift:=xlUp
        r = r + 1
        a = a + 1

'sinon on passe à la ligne suivante
        Else
        r = r + 1
    End If
    
Loop

End Sub
En espérant vous avoir aidé.

Tomo
 

Pièces jointes

  • Base de donne des volontaires.xlsm
    39.4 KB · Affichages: 13
Haut Bas