Tableau à compléter

  • Initiateur de la discussion Initiateur de la discussion lesmarseillais
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

lesmarseillais

Guest
Bonjour à toutes et tous.
Voila mon problème.
Je débute sous excel. Et j'avoue ne rien comprendre à la programation VBA, malgré mes efforts.
L'an passé j'ai fait un tableau de service pour les personnels avec lesquels je travaille. Je souhaite compléter automatiquement le tableau au niveau des repos.
Je m'explique, nous sommes 1,2,3 et 4.
Les personnels civils qui travaillent avec nous sont A, B, C ...L.
Je souhaite automatiser le remplissage de la case repos par les lettres (représentant les personnes) qui ne travaillent pas ce jour là.
Merci pour votre aide.
Denis
 

Pièces jointes

Re : Tableau à compléter

Bonjour lesmarseillais, bienvenue sur XLD,

La macro suivante dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 18 Or Target.Row < 4 Then Exit Sub
Dim tablo, plage As Range, i As Byte, txt As String
Cancel = True
tablo = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
Set plage = Intersect(Target.EntireRow, Range("C:Q"))
For i = 0 To UBound(tablo)
If Application.CountIf(plage, tablo(i)) = 0 Then txt = txt & tablo(i)
Next
Target = txt
End Sub

Elle se déclanche sur un double-clic en colonne R.

Fichier joint.

A+
 

Pièces jointes

Re : Tableau à compléter

Bonjour et bienvenu sur le forum, salut job,

En pièce jointe une façon simple d'obtenir le résultat souhaité par un petit tableau intermédiaire (colonnes S:AD), qui peut être masqué.
Pour que la fonction MCONCAT() (colonne R) fonctionne il faut préalablement télécharger (gratuit) les fonctions complémentaires Morefunc (voir sur le Net).
Le même résultat est obtenu en colonne AE sans cette fonction (formule plus longue).

Quelques suggestions d'automatisation du tableau A4:R34 :
- les dates en colonne B s'ajustent à la date saisie en G2 et se limitent au dernier jour du mois concerné (par exemple 28 pour février 2009)
- la première lettre du jour concerné en colonne A s'ajuste aussi à la date de la colonne B
- le grisé des weekend et la police rouge des nombres sont automatisés par une MFC (mise en forme conditionnelle sous le menu Format)

Dis-nous si cela te convient.
 

Pièces jointes

Re : Tableau à compléter

Bonjour,

Je ne sais pas le résoudre avec le code vba. Mais je peux peut-être t'offrir une piste avec un algorithme :

Code:
De 1 au nombre de lignes faire 
   repos = ""
   Pour toutes les cellules entre E4 et N4 faire
      si laCellule <> "A" alors
         repos = repos + "A"
      finSi
      si laCellule <> "B" alors
         repos = repos + "B"
      finSi
...

   laCelluleRepos = repos

   passer à la ligne suivante
Fin

(Les algorithmes version vba n'ont jamais été mon fort... mais j'espère que tu arriveras à comprendre et que ça a pu te donner des idées.)
 
Re : Tableau à compléter

Re, salut hoerwind, berangere,

Une autre solution en nommant (menu Insertion-Nom) Noms la plage E36:E47 :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 18 Or Target.Row < 4 Then Exit Sub
Dim plage As Range, cel As Range, txt As String
Cancel = True
Set plage = Intersect(Target.EntireRow, Range("C:Q"))
For Each cel In [COLOR="Red"]Range("Noms")[/COLOR]
If Application.CountIf(plage, Left(cel, 1)) = 0 Then txt = txt & Left(cel, 1)
Next
Target = txt
End Sub

A+
 

Pièces jointes

Re : Tableau à compléter

Re encore,

Une dernière solution, si l'on préfère remplir toute la colonne R d'un coup :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim plage As Range, txt As String, cel As Range
Cancel = True
For Each Target In Range("R4:R" & Range("A4").End(xlDown).Row)
  Set plage = Intersect(Target.EntireRow, Range("C:Q"))
  txt = ""
  For Each cel In Range("Noms")
    If Application.CountIf(plage, Left(cel, 1)) = 0 Then txt = txt & Left(cel, 1)
  Next
  Target = txt
Next
End Sub

A+
 

Pièces jointes

Re : Tableau à compléter

Ben dites donc !
Je savais que j'étais une quiche avec excel mais là !!!!
Merci à vous toute et tous.
Même si c'est du petit chinois pour moi, en tout cas ça marche.
Denis
 
Re : Tableau à compléter

Bonjour j'essaye de comprendre et de revenir sur ce que me dit Bérengère.
En T4 j'ai inscrit la formule ci-dessous :
=SI(SI.NB(C4:Q4)<>"A";"";"A")
la condition est de chercher en C4:Q4 si les cellules sont différentes de A si oui tu mets rien, sinon tu mets A.
Mais ca ne fonctionne pas ???????????
Merci
Denis
 
Re : Tableau à compléter

Bonjour,

Pas très clair comme explication.

La condition serait-elle que si au moins une des cellules de la plage C4:Q4 contient "A", alors renvoyer "A" en T4, si non rien ?

Si mon interprétation est exacte, essaie : =SI(NB.SI(C4:Q4;"A")>0;"A";"")

La fonction SI.NB n'existe pas.
NB.SI compte, donc son résultat ne peut être comparé qu'à un nombre et non à une lettre.
 
Re : Tableau à compléter

Merci hoerwind,
Voici donc la bonne formule
=SI(NB.SI(C4:Q4;"A")>0;"";"A")
Comment peux t'on avec la même formule ajouter "B","C" etc...
Denis
PS : A force de triturer les formules je me mélange tout NB.SI et non SI.NB
 
Re : Tableau à compléter

non en fait si la lettre représentant la personne est inscrite c est qu elle travaille donc Il faut qu elle ne soit pas en repos et vice versa.
La formule est bonne pour "A" mais comment ajouter "B","C" etc .....
Merci a vous
Denis
 
Re : Tableau à compléter

Re,

Si je comprends ta question, tu voudrais une formule qui renvoie en T4 toutes les lettres présentent en C4:Q4, mais sans doublons.

Est-ce cela ?
je ne suis pas sur de mettre bien exprimé. En T4 je voudrais toutes les lettres qui ne sont pas présentent entre C4;O4.
Et en complexifiant pourquoi pas les chiffres 1 a 4 et en rouge svp ....
Denis
 
Re : Tableau à compléter

Bonjour,

D'après ce que tu expliques, et pour autant autant que j'ai compris ton souhait, tu reviens à ta question de départ pour laquelle tu as reçu des réponses par macro et par formules.

Que veux-tu de plus ?
Peut-être qu'en précisant ce que tu souhaites obtenir en T4 ta question sera plus facile à comprendre.
 
Re : Tableau à compléter

Bonjour,

Sachant que les solutions en VBA sont excellentes et que je vais m'en servir mais dans un soucis de perfectionnement et repensant à ce qu'a proposée Bérengère je me suis posé la question peut on résoudre ce problème sans VBA. Apparemment oui.
J'essaye donc de trouver la formule appropriée au problème initial. C'est un peu idiot me direz-vous mais c'est avec des exercices qu'on progresse.

Donc en T4 je cherche la formule qui me permet de trouver les repos qui sont actuellement en RS4 (ou directement en RS4 peut importe l'essentiel étant de comprendre).
Peut on pour complexifier le truc, dans un deuxième temps, compter 1,2,3 et 4 et les afficher en rouge ? (toujours dans la case repos RS4 ou T4)

Bon week-end à tous et encore merci pour votre aide
Denis
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
714
Réponses
0
Affichages
619
Retour