Sortir des informations d'une base de données en fonction d

Bonjour à tous,

Je me permet de vous solliciter car je colle sur la réalisation d'un fichier excel!

Je suis actuellement en train de créer une base de données liant des taches à des effectifs (du personnel). sur une feuille nommée "Datas"

Cependant, dans l’idéal je souhaiterai créer un planning dans le même classeur dans une feuille appelée "Planning" , un planning utilisant ma base de données.

Mon problème actuel est le suivant:

Je désirai savoir s'il était possible de gérer dans mon planning les désignations de taches en les triant par catégories, car dans ma base de données je classe les taches par catégories (travaux prepa, travaux principaux, finitions ... etc)

En résume je désirai savoir comment serait-il possible de cliquer dans la colonne tache de mon planning (en bleu dans le fichier exemple), et ainsi avoir la possibilité de trier par catégorie ensuite de choisir le type de travaux et que cela s'affiche dans cette même cellule. Il faut certainement passer par le biais de boite de dialogue sous VBA mais je suis débutant en VBA .....

Cela parait peu être flou c'est pourquoi je vous joint mon fichier

Merci par avance,

38forum.xlsm (51.69 Ko)

Bonjour à tous,

thibault1090,

Une solution,

Avec en En B19

=DECALER($F$19;;;NBVAL($F:$F)-1)

et en C19

=DECALER($E$2;EQUIV(B19;D:D;0)-2;0;NB.SI(D:D;B19))

+ quelques modif

A voir dans ton fichier

27forum-1.xlsm (55.53 Ko)

Tout d'abord, merci bcp pour cette solution je pense que cela va beaucoup m'aider !

Cependant j'aurais encore besoin de vos lumières....

Je desirai savoir s'il est possible de tracer un trait automatiquement en rentrant une plage selectionnees par le biais d'une InputBox ?

En résumé je clique sur un bouton (nommé "avancement" dans mon fichier), je détermine la taille du trait en sélectionnant une plage de données, et un trait horizontal se crée .....

Pour l'instant j'ai cela :

Sub avancement()

'

' AVANCEMENT Macro

Dim avancement As Range

Set avancement = Application.InputBox(prompt:="Sélectionner la duree", Type:=8)

avancement.Interior.Color = RGB(174, 240, 194)

End Sub

Mais cela ne me convient pas de remplir les cases par une couleur (car j'utilise des cases rempli pour matérialiser les WE) je voudrait donc savoir s'il est possible de tracer un trait horizontal et non pas de colorier les cellules.

Encore merci,

Cordialement.

Bonjour,

Avec cette macro dans un module et affectée à ton bouton, tu souligne en gras la plage sélectionnée.

Sub avancement()
  For Each c In Selection
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
  Next c
End Sub

Merci pour ta reponse rapide !

Par contre lorsque j'affecte la macro suivante :

Sub avancement()

'

' AVANCEMENT Macro

Dim avancement As Range

Set avancement = Application.InputBox(prompt:="Sélectionner la durée", Type:=8)

For Each c In Selection

Selection.Borders(xlDiagonalDown).LineStyle = xlNone

Selection.Borders(xlDiagonalUp).LineStyle = xlNone

Selection.Borders(xlEdgeLeft).LineStyle = xlNone

Selection.Borders(xlEdgeTop).LineStyle = xlNone

With Selection.Borders(xlEdgeBottom)

.LineStyle = xlContinuous

.ColorIndex = 0

.TintAndShade = 0

.Weight = xlMedium

End With

Selection.Borders(xlEdgeRight).LineStyle = xlNone

Selection.Borders(xlInsideVertical).LineStyle = xlNone

Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

Next c

End Sub

Un message d'erreur apparait: "erreur d'execution 438" - Propriété ou méthode non géré par cet objet

Si je fais debogage il me surligne en jaune "For Each c In Selection"

Re,

Ok, normal, c'est une macro que j'ai adapté et mal recopié essayes ça. C'est plus concentré.

Dim avancement As Range
Set avancement = Application.InputBox(prompt:="Sélectionner la durée" Type:=8)
    With avancement.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
End Sub

Genial !!! Merci beaucoup

Je pense avoir la réponse mais je demande pour en être certain, mais il est impossible de trace le trait en milieu de cellule ?

Quoi qu'il en soit c'est déjà très bien comme cela .

Au risque de paraître particulièrement "chiant" :s. J'ai une dernière question (j’espère ne pas abuser de votre temps).

Afin de finaliser tout cela, comment pourrais-je récupérer le nombre de cellule sélectionnées ( lorsque je sélectionne mes données par le biais de l'InputBox ) afin de déduire le nombre de poste (une cellule = 1 journée dans mon cas) et qu'il s'affiche en H9 (par exemple) si j'utilise la formule sur la ligne 9.

En résumé, si je souligne 9 cellules est-il possible de récupérer le "9" et de l'exploiter dans une cellule choisie.

Encore mille merci,

Cordialement.

Re,

Q 1 : Tu peux barrer les cellules en modifiant

With avancement.Borders(xlEdgeBottom)

par

With avancement.Borders(xlDiagonalUp)

dans le code

Q 2 : je sais calculer les couleurs ou les données, pas les bordures, je cherche si c'est faisable.

Le plus simple serait qu'à mesure de l'avancement le contenu de tes cellules change.

Bonjour

Peut-être en faisant comme cela ?

nbcol = avancement.Columns.Count

Bonjour Banzai64,

Merci pour ton aide,

Tu le mets ou le code stp

Bonjour

Dans la macro juste après l'InputBox

Dim avancement As Range
Set avancement = Application.InputBox(prompt:="Sélectionner la durée" Type:=8)
nbcol = avancement.Columns.Count
    With avancement.Borders(xlEdgeBottom)

Ou alors je n'ai pas compris le problème

Re,

J'avais testé, il ne ce passe rien, normal on indique pas

de Range à la fonction "nbcol"

Le but de thibault est : quand il sélectionne une plage dans l'imputbox le nombre de cell sélectionnées soit compté et écrit dans une cellule "X".

Merci pour ta reponse BANZAI64 !

Mais tout comme MOBIL, je ne vois pas ou mettre la formule

Cordialement

Bonjour

Le nombre de cellules (colonnes) est dans la variable NbCol

Si on veut le noter directement dans une cellule faire

Range("A1")=avancement.Columns.Count
mobil a écrit :

dans une cellule "X"

X est calculé ou alors bien défini

Re,

@ Banzai64, Ok merci avec cette instruction ça fontionne

Banzai64 a écrit :

X est calculé ou alors bien défini

Thibault le définit pour exemple en H9, il lui suffira de remplacer A1 par la cellule qu'il compte utiliser sur son fichier fini.

Sub avancement()
Dim avancement As Range
Set avancement = Application.InputBox(prompt:="Sélectionner la plage", Type:=8)
Range("A1") = avancement.Columns.Count
avancement.Interior.Color = RGB(54, 170, 242)
    With avancement.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
End Sub

@ Thibault, ne pas oublier qu'à chaque utilisation de la macro le compte change en A1

Rechercher des sujets similaires à "sortir informations base donnees fonction"