Excel 2013 : planning dynamique

jonhza Messages postés 3 Date d'inscription vendredi 2 janvier 2015 Statut Membre Dernière intervention 2 janvier 2015 - Modifié par jonhza le 2/01/2015 à 02:35
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 2 janv. 2015 à 11:27
Bonsoir à tous, je cherche à créer un planning à partir d'un bouton lié à un userform : je rentre des noms de tâche, une date de début et de fin de la tâche, et le pôle responsable de la tâche, et en cliquant sur valider, une shape doit se créer et doit correspondre aux 2 dates entrées, seulement quand j'exécute, la shape ne se place pas où elle devrait, c'est-à-dire à une des cellules correspondant au mois de la date de début...

Je ne sais pas si je me suis bien exprimé, j'aurais aimé vous envoyer le fichier, voici le code, c'est surtout la partie soulignée qui doit poser problème selon moi.

En vous remerciant de vos réponses



Private Sub Annuler_Click()
Unload NouveauProjet

End Sub
Private Sub UserForm_Initialize()
Inputs.Activate
ListBox1.List = Range("Q2:Q5").Value
End Sub

Private Sub Valider_Click()
Dim i As Integer

Dim j As Integer

Dim l As Single, t As Single, h As Single, w As Single
nb_ligne = Inputs.Cells(Rows.Count, 1).End(xlUp).Row

If IsNumeric(Projet) = True Then
MsgBox ("Entrez un nom de projet")

Else
Inputs.Cells(nb_ligne + 1, 1).Value = Projet.Value

End If

Inputs.Cells(nb_ligne + 1, 2).Value = Début.Value
Inputs.Cells(nb_ligne + 1, 3).Value = Fin.Value
Inputs.Cells(nb_ligne + 1, 4).Value = ListBox1.Value


i = Fin.Value - Début.Value
j = Début.Value - DateSerial(Year(Date), 1, 1)
If ListBox1.Value = Range("Q2").Value Then
h = Range("C4").Height * 3
w = Range("C4").Width * i / 7
l = Range("C4").Left * j / 7
t = Range("C4").Top

Worksheets("Feuil1").Activate

ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, l, t, w, h).Select

With Selection
.Characters.Text = Projet.Value
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With

End If

Unload NouveauProjet
Range("F10").Activate
End Sub


3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 2/01/2015 à 08:33
Bonjour,
Que veux-tu qu'on te réponde ?
La syntaxe des instructions de positionnement de ce shape est correcte et le shape se place bien en coordonnées l,t,w et h.
Ce qui signifie, si le shape ne se place pas là où tu le voudrais, que tu as mal calculé les variables l,t,w, et h.
Or, la valeur de w dépend de celle de i et celle l dépend de la valeur de j.
Tout revient dont à la vérification du calcul de i et du calcul de j.
Or :
- i est calculé sur la base de Fin.Value et Début.Value
- j est calculé sur la base de Début.value
Or, nous ne savons rien de ces bases (ton code n'en dit rien) de calcul !
Et que dire de ces divisions par 7 ? (probablement les 7 jours d'une semaine ?)
Impossible, dans ces conditions, de t'aider autrement qu'en te rappelant ce point fondamental :
Tant les coordonnées d'une cellule que celles de placement d'un contrôle ou d'un Shape sont en points.
A partir de là, tout le reste est calcul purement arithmétique en fonction de ce que tu es seul à savoir de ce que tu as et veux faire avec !

PS Il me semble à priori logique (si j'ai bien deviné), non de calculer comme tu le fait, mais de déterminer la cellule où effectuer ton placement en appliquant à la cellule C4 un Offset (ouvre ton aide VBA sur ce mot).
ainsi (exemple) : Range("C4").offset(2,3) est la cellule F6

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
jonhza Messages postés 3 Date d'inscription vendredi 2 janvier 2015 Statut Membre Dernière intervention 2 janvier 2015
2 janv. 2015 à 10:47
Pour être plus clair, i correspond au nombre de jours entre le début et la fin de la tâche, Début.value corespond au début de la tâche à réaliser.
J'ai considéré qu'une cellule =7 jours et cela s'étale sur 52 semaines,d'où les divisions par 7.

Seulement, pour l cela ne fonctionne pas.

J'ai testé la méthode offset

l = Range("C4").offset(0,j/7)


C'est la ligne que j'ai changée, mais cette fois-ci, la shape se crée à la première colonne, elle ne semble pas bouger..

Fais-je fausse route ?

En tout cas merci de m'avoir répondu
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 janv. 2015 à 11:27
Je n'en sais rigoureusement rien, ignorant tout des tenants et aboutissants et de la construction de ta feuille.
Une seule chose est claire (et je te l'ai déjà dit) :
1) tu dois D'ABORD déterminer la cellule où positionner ta shape (par calcul n'ayant rien à voir avec des "distances", mais tout à voir avec un écart en nombre de cellules, éc art ensuite utilisé par Offset)
2) A partir de là :
- a) les propriétés left et Top de ta Shape doivent être celles de la cellule déterminée en 1)
- b) les largeur et hauteur du shape, si non égales à la cellule d' "accueil", font seules l'objet d'un calcul en fonction de ce que tu es jusqu'à présent tout--à-fait seul à connaître).
0
Rejoignez-nous