A voir également:
- [VBA] selectionner et remplir des cases
- Organigramme a remplir word - Guide
- Remplir et signer pdf - Guide
- Sélectionner texte pdf - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
9 réponses
eriiic
Messages postés
24601
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 novembre 2024
7 243
24 juil. 2008 à 17:12
24 juil. 2008 à 17:12
Bonjour,
tu peux définir une plage avec range(cells(i1,j1),cells(i2,j2)) avec :
i1 et i2 : n° de lignes
j1 et j2 : n° de colonnes
Tu as également .offset() et .resize() qui pourraient te servir :
[A1].offset(1,2).resize(2,8)
.offset te décale ta référence A1 de 1 ligne et 2 colonnes => C2
.resize(2,8) te redimensionne la plage à 2 lignes sur 8 colonnes. => C2:J3
eric
tu peux définir une plage avec range(cells(i1,j1),cells(i2,j2)) avec :
i1 et i2 : n° de lignes
j1 et j2 : n° de colonnes
Tu as également .offset() et .resize() qui pourraient te servir :
[A1].offset(1,2).resize(2,8)
.offset te décale ta référence A1 de 1 ligne et 2 colonnes => C2
.resize(2,8) te redimensionne la plage à 2 lignes sur 8 colonnes. => C2:J3
eric
Bonjour eriic et merci pour ta réponse.
Pourrais tu me montrer plus précisément comment intégrer ces fonctions??
Je n'ai vraiment aucune notions en code!! pardonne mon ignorance!
merci!!
Pourrais tu me montrer plus précisément comment intégrer ces fonctions??
Je n'ai vraiment aucune notions en code!! pardonne mon ignorance!
merci!!
eriiic
Messages postés
24601
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 novembre 2024
7 243
24 juil. 2008 à 23:51
24 juil. 2008 à 23:51
ma réponse de tout à l'heure a disparue...
Un exemple tu en as au post 1.
Si tu veux qcq chose de plus précis pose une question plus précise que changer le début et la fin de chaque plage.
Je t'ai donné 2 façon de faire, maintenant moi je ne sais pas de combien tu veux décaler l'origine ni de combien tu veux changer la taille. Ca c'est toi qui le sais
eric
Un exemple tu en as au post 1.
Si tu veux qcq chose de plus précis pose une question plus précise que changer le début et la fin de chaque plage.
Je t'ai donné 2 façon de faire, maintenant moi je ne sais pas de combien tu veux décaler l'origine ni de combien tu veux changer la taille. Ca c'est toi qui le sais
eric
Merci de m'accorder de ton temps eric!
J'ai bien compris le principe sur lequel reposent les deux solutions que tu me proposes. Néanmoins, je n'arrive pas à écrire le code de la macro. Comme je l'ai dit, je suis complètement débutant! Je n'ai jamais eu à écrire du code jusqu'à aujourd'hui! Si c'est possible, je voudrais que tu reprenne ma macro et que tu y insères une de tes fonctions. Ca me permettrai de voir la logique d'écriture. (je ne sais pas comment déclarer une variable, faut il déclarer une fonction pour utiliser Range...j'y connais vraiment rien!!!)
D'un autre coté, pourrais tu m'expliquer comment peut-on écrire une macro en coordonnées RiCj.
Par exemple, je voudrais transformer la plages ''A1:C1'' en ''R1C1:R1C3" dans la macro précédente. Que faut-il rajouter au code pour changer le système de coordonnées??
En passant en coordonnées RiCj, je pourrais faire varier la longueur (durée) et la position des plages colorés (début et fin) en jouant sur i et j.
i et j seront calculé dans un tableau à part...en passant par ce sénario là, j'arrive à voir une fin logique et rapide à mon problème (à peu près!)
Je me permet de te joindre mon fichier (tableau + macro) en éspérant que tu puisses mieux voir quel résultat je voudrais obtenir.
http://www.cijoint.fr/cjlink.php?file=cj200807/cijLv9jWVv.xls
Seul face à mon ordi, je me sens un peu au dépourvu...J'apprécie ton aide! Encore merci
Guiom
J'ai bien compris le principe sur lequel reposent les deux solutions que tu me proposes. Néanmoins, je n'arrive pas à écrire le code de la macro. Comme je l'ai dit, je suis complètement débutant! Je n'ai jamais eu à écrire du code jusqu'à aujourd'hui! Si c'est possible, je voudrais que tu reprenne ma macro et que tu y insères une de tes fonctions. Ca me permettrai de voir la logique d'écriture. (je ne sais pas comment déclarer une variable, faut il déclarer une fonction pour utiliser Range...j'y connais vraiment rien!!!)
D'un autre coté, pourrais tu m'expliquer comment peut-on écrire une macro en coordonnées RiCj.
Par exemple, je voudrais transformer la plages ''A1:C1'' en ''R1C1:R1C3" dans la macro précédente. Que faut-il rajouter au code pour changer le système de coordonnées??
En passant en coordonnées RiCj, je pourrais faire varier la longueur (durée) et la position des plages colorés (début et fin) en jouant sur i et j.
i et j seront calculé dans un tableau à part...en passant par ce sénario là, j'arrive à voir une fin logique et rapide à mon problème (à peu près!)
Je me permet de te joindre mon fichier (tableau + macro) en éspérant que tu puisses mieux voir quel résultat je voudrais obtenir.
http://www.cijoint.fr/cjlink.php?file=cj200807/cijLv9jWVv.xls
Seul face à mon ordi, je me sens un peu au dépourvu...J'apprécie ton aide! Encore merci
Guiom
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
eriiic
Messages postés
24601
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 novembre 2024
7 243
25 juil. 2008 à 17:28
25 juil. 2008 à 17:28
Même si ça correspond à ta description, ton besoin final n'a plus grand chose à voir.
C'est quand même plus complexe qu'une seule plage qu'il faut étendre...
C'est quand même plus complexe qu'une seule plage qu'il faut étendre...
eriiic
Messages postés
24601
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 novembre 2024
7 243
25 juil. 2008 à 17:51
25 juil. 2008 à 17:51
Voici une solution, je n'ai pas réutilisé ta macro
Je suis parti du principe que tous les procédés avaient 5 étapes...
Il faut que les noms indiqués soient définis, et que les durées soient saisies, c'est suffisant.
Ca donne ça :
http://www.cijoint.fr/cjlink.php?file=cj200807/cijhNDgyJB.xls
Si tu as besoin d"explication demande...
eric
Je suis parti du principe que tous les procédés avaient 5 étapes...
Il faut que les noms indiqués soient définis, et que les durées soient saisies, c'est suffisant.
Ca donne ça :
Sub colorer() Dim c As Range Dim colDeb As Integer, ligDeb As Long Dim col As Integer, lig As Long, l As Integer Const nbprocédures = 5 Const nbPeriodes = 8 * 12 ' 8h * 12 périodes de 5 min par heure ligDeb = Range("Début").Row colDeb = Range("Début").Column For Each c In Range("Durée") l = c.Value / 5 ' nombre de cellules à colorer Cells(ligDeb, colDeb).Offset(lig, col).Resize(1, l).Interior.ColorIndex = 3 lig = (lig + 1) Mod nbprocédures ' ligne procédure suivante col = (col + l) Mod nbPeriodes ' colonne suivante à remplir Next c End Sub
http://www.cijoint.fr/cjlink.php?file=cj200807/cijhNDgyJB.xls
Si tu as besoin d"explication demande...
eric
Mille mercis Eric!
Non seulement ta macro est très efficace mais en plus tu y as inséré des boutons et une boucle RAZ.
Ce ajouts permettent de simplifier l'interface et renderont cet outil encore plus performant!
Malheuresement, le remplissage du suivi du procédé ne commence pas forcément à l'étape 1
(le procédé tourne 24h sur 24, en arrivant à 5h, le procédé peut être en milieu d'étape 3 par exemple)
Est il possible de faire varier la position de "Début"?
Le cahier des charges de l'application Excel à développer (et qui avance principalement grâce à ton aide) impose un sénario assez figé.
En résumé: l'opérateur doit
1. sélectionner les "ingrédients" dans des listes déroulantes.
En fonction de ces choix, la durée de chacune des étapes est calculée (tableau des durée). (ça marche)
2. sélectionner l'étape en cours et l'heure de fin de cette étape.
En fonction ce ces choix, le cheminement théorique est calé. On sait à quelle étape on commence le remplissage du tableau et on peut calculer la durée qu'il reste pour finir cette première étape. Le reste s'enchaine simplement dans l'ordre et en fonction des durées calculés dans le tableau précédent.
3. imprimer le cheminement théorique des étapes du procédé pour les trois postes de la journée.
3 macros identiques vont donc tourner sur 3 tableaux où le début du tableau n+1 correspond à le fin du tableau n.
(un tableau par poste (matin , après-midi et nuit) est nécessaire car Excel n'a pas assez de colonnes pour faire les trois postes sur une journée! puis un tableau par poste est plus lisible pour les opérateurs)
En éspérant que ce complément d'informations te permettera de m'aider encore un peu pour finir cette macro!
J'apprends beaucoup en décortiquant tes fonctions, même si je ne comprend pas encore toute la logique d'écriture!
Merci pour ton aide
Cordialement
Guiom
Non seulement ta macro est très efficace mais en plus tu y as inséré des boutons et une boucle RAZ.
Ce ajouts permettent de simplifier l'interface et renderont cet outil encore plus performant!
Malheuresement, le remplissage du suivi du procédé ne commence pas forcément à l'étape 1
(le procédé tourne 24h sur 24, en arrivant à 5h, le procédé peut être en milieu d'étape 3 par exemple)
Est il possible de faire varier la position de "Début"?
Le cahier des charges de l'application Excel à développer (et qui avance principalement grâce à ton aide) impose un sénario assez figé.
En résumé: l'opérateur doit
1. sélectionner les "ingrédients" dans des listes déroulantes.
En fonction de ces choix, la durée de chacune des étapes est calculée (tableau des durée). (ça marche)
2. sélectionner l'étape en cours et l'heure de fin de cette étape.
En fonction ce ces choix, le cheminement théorique est calé. On sait à quelle étape on commence le remplissage du tableau et on peut calculer la durée qu'il reste pour finir cette première étape. Le reste s'enchaine simplement dans l'ordre et en fonction des durées calculés dans le tableau précédent.
3. imprimer le cheminement théorique des étapes du procédé pour les trois postes de la journée.
3 macros identiques vont donc tourner sur 3 tableaux où le début du tableau n+1 correspond à le fin du tableau n.
(un tableau par poste (matin , après-midi et nuit) est nécessaire car Excel n'a pas assez de colonnes pour faire les trois postes sur une journée! puis un tableau par poste est plus lisible pour les opérateurs)
En éspérant que ce complément d'informations te permettera de m'aider encore un peu pour finir cette macro!
J'apprends beaucoup en décortiquant tes fonctions, même si je ne comprend pas encore toute la logique d'écriture!
Merci pour ton aide
Cordialement
Guiom
eriiic
Messages postés
24601
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 novembre 2024
7 243
28 juil. 2008 à 14:50
28 juil. 2008 à 14:50
Je n'ai pas tout lu dans le détail mais pour avancer un peu et rester simple, teste en ajoutant ça devant 'for each....' :
Pas sûr que ce soit vraiment que tu veuilles.
Bien sûr si tu demandes un démarrage à l'étape 3 avec un décalage de 10, l'étape 2 semble démarrer avant...mais c'est sur une heure postérieure en fait.
Si besoin je te laisse modifier et faire le calcul pour une saisie de l'heure de début à la place d'un décalage
eric
lig = CLng(InputBox("Démarrer à l'étape (1 à 5) :", "Paramètres de début", 1)) - 1 col = CLng(InputBox("Décalage (nombre de tranches de 5 minutes) :", "Paramètres de début", 0))
Pas sûr que ce soit vraiment que tu veuilles.
Bien sûr si tu demandes un démarrage à l'étape 3 avec un décalage de 10, l'étape 2 semble démarrer avant...mais c'est sur une heure postérieure en fait.
Si besoin je te laisse modifier et faire le calcul pour une saisie de l'heure de début à la place d'un décalage
eric