Offset avec VBA

Bonjour,

Je veux évaluer si la cellue K2=X que Offset(1,3) met X à K4 sinon qu'il met X à K9. Mais je n'y arrive pas. Voici mon code :

Sub filing()
Dim cel  As Range
ThisWorkbook.Activate
Range("K2").Select
If Range("K2").Value = "X" Then
ActiveCell.Offset(1, 2).Value = Range("K2")
Else
cel.Offset(1, 5).Value = "X"
End If

End Sub

S'il vous plaît quelqu'un peut il me situer

Merci!

Bonjour,

J'ai pas tout compris !!!!

Peut-être :

Sub filing()
Dim cel As Range
  Set cel = ThisWorkbook.ActiveSheet.Range("K2")
  If cel.Value = "X" Then
    cel.Offset(2, 0).Value = "X"  'K(2+2) = K4
  Else
    cel.Offset(7, 0).Value = "X"  'K(2+7) = K9
  End If
End Sub

Merci infiniment. C'est ça même.

Comme j'avais des soucis avec offset j'ai tenté avec Range et ça marche aussi.

voici

Sub filing()
ThisWorkbook.Activate
Range("K2").Select
If Range("K2").Value = "X" Then
'Range("K2").Offset(, 2).Value = "X"
Range("K3:K10")(3).Value = "X"
Else
'Range("K2").Offset(, 5).Value = "X"
Range("K3:K10")(5) = "X"
End If
'Next cel

End Sub

Merci. mais je veux mettre ça en fonction d'autre élement comme un autre champ. où devrais je ouvrir un autre champ.

Bonsoir,

Sub filing()
    Dim ln%
    With ActiveSheet
        ln = IIf(.Range("K2") = "X", 4, 9)
        .Range("K" & ln) = "X"
    End With
End Sub

Nb- Indente ton code, qualifie tes expressions, bannis tout Select ou Activate...

Cordialement.

Merci infiniment!

Je me demande comment proceder pour faire plus au lieu d'utiliser une seule cellule mais plus de le faire sur plusieurs cellules au choix mais sur la même ligne ie

si K2="X" de remplir plus cellule avec x; je veux dire mettre X dans les 3ème cellule, 6ème cellule; 8ème cellule, 9 ème cellule, 18 ème cellule, 21ème cellulle de la plage O2 à AL2.

Mon code ne marche et je me demande quel est le soucis

Sub filing()
ThisWorkbook.Activate
Range("K2:AL2").Select
If Range("K2").Value = "X" Then
Range("O2:AL2")(3, 6, 8, 9, 15, 18, 20, 21).Value = "X"
ElseIf Range("L2").Value = "X" Then
Range("O2:AL2")(, "1,7,10,12,13,19,22,24").Value = "X"
ElseIf Range("M2").Value = "X" Then
Range("O2:AL2")(, "2,4,5,11,14,16,17,23").Value = "X"
End If
End Sub

Merci d'avance!

Bonsoir,

Il y a deux types de problèmes :

Le premier est que si tu ignores les conseils pour améliorer ton code, le rendre lisible, cohérent et fiable, cela ne s'arrangera pas, et si de plus tu inventes ta propre syntaxe VBA cela a toutes les chances de produire n'importe quoi.

Le second est que tes explications manquent de clarté, à l'instar de ton autre sujet ressemblant, qui n'a pas reçu de réponse parce que sans fichier d'illustration et des explications solides on ne peut parvenir à une analyse cohérente de la question...

Donc si tu ne commences pas par un fichier, qui illustre la situation de départ et la situation à laquelle il faut parvenir, et ne clarifies pas tes explications, je vois mal comment ça pourrait avancer... On subodore un ensemble de cycles qui devraient sous-tendre les manipulations que tu t'évertues à tenter mais il manque trop d'éléments pour que cela prenne forme et qu'on puisse en tirer un algorithme de calcul applicable. Le noeud du problème est là, ensuite il n'y aura qu'à programmer. Pas un problème ! à condition de respecter des règles en la matière...

Cordialement.

Merci infiniment.

Pour l'autre post j'ai chargé un fichier. pour celui ci, voici le fichier joint.

Merci!

par soucis de taille j'ai supprimé le macro de copy automatique de la liste des agents vers la feuille quart .

61shift.xlsx (29.70 Ko)

Bonjour,

Tu présentes un fichier qui fait apparaître 4 horaires de travail dans la journée. On peut supposer que sur la feuille Menu principal tu listes les agents et indiques pour chacun l'horaire avec lequel il démarre le premier jour de ton planning.

Si c'est bien le cas, déjà il fallait le dire au départ, ou maintenant le confirmer, en ajoutant des détails s'il y a lieu, car ce n'est qu'une déduction de ma part, qui doit nécessairement être fournie par toi si tu veux faire traiter correctement ta question.

1er problème : 4 horaires et tu n'en utilises que 2 ! soit tu utilises les 4, soit tu dis pourquoi 2 ne sont pas utilisés... un premier trou d'explications qui va faire se poser des questions. Pour analyser la question posée, on ne doit pas avoir à se poser des questions sur les données du problème, on doit avoir toutes les réponses dès le départ.

Ensuite il y a une information nommée roulement que tu peux faire varier de 2 à 10... Il serait peut-être utile de savoir ce que cela signifie ?

En ramenant la question à sa structure abstraite : j'ai 4 situations de départ possibles, 9 cas de traitement différencié, j'ai donc 36 situations résultantes à produire (si aucun autre élément n'intervient). Je n'ai pas vu illustrer ces 36 résultats.

En outre, passons sur la feuille Quart, je ne vois rien d'illustré du tout !

Mais tu as des explications, inutiles car elles n'expliquent rien ! L'explication réside dans la règle qui doit être appliquée pour produire la série résultante. Tu indiques juste le maillon suivant. Tu ne prolonges pas la suite jusqu'à ce qu'elle revienne à la situation de départ (ce qui doit être le cas s'il s'agit bien d'un cycle). Et l'extrapolation sur tes indications ne permet pas de boucler...

Et tu n'envisages que 4 cas alors que ton sélecteur en produit 9 !

Résumons-nous : 4 points de départ, 9 cas de traitement, à combiner.

Les règles de traitement devant être appliquées dans chacun des cas ne sont pas édictées.

Et aucune illustration de chacun des cas possible, sur le mois ou sur la période suffisante pour appréhender la logique de la série, n'est fournie.

Cordialement.

NB- Et ce n'est pas en répliquant le sujet que tu vas mieux avancer !

Bonjour,

je vais essasyer d'être plus précis :

Tu présentes un fichier qui fait apparaître 4 horaires de travail dans la journée. On peut supposer que sur la feuille Menu principal tu listes les agents et indiques pour chacun l'horaire avec lequel il démarre le premier jour de ton planning.

Si c'est bien le cas, déjà il fallait le dire au départ, ou maintenant le confirmer, en ajoutant des détails s'il y a lieu, car ce n'est qu'une déduction de ma part, qui doit nécessairement être fournie par toi si tu veux faire traiter correctement ta question.

: Je le confirme. , au fait le nombre d'agents varient en fonction du roulement(nombre d'équipe qui tourne : roulement à 5 veut dire que c'est 5 équipe qui tourne, etc..)

Sur la feuille MENU PRINCIPAL:

  • Roulement : le roulement correspond au nombre d'équipe(ou d'agent) devant rôter entre elles; j'ai pris 2 à10 pour extension ou réduction possible dans le futur(pour tout se suite c'est 3,4,5 et 6 qui m'interresse).
  • 00h:07h, 07h-14h, 14h-20h et 20h-00h: ce sont des heures de services de quarts ou de brigade(une équipe travaille pour un créneau puis rentre se reposer et une autre équipe prend la relève pour un autre créneau. Je n'ai remplis que 2 car je n'ai fait que rentrer 2 agents(pour chaque roulement il faut aumoins le même nombre d'agents: une équipe peut être au tant d'agents que disponible mais il faut au mois le nombre de roulement en agents puis on pourra doubler, tripler, etc... selon le nombre d'agents disponibles).
En détails:
  • ---- l'équipe qui fait 00h-07h00 va se reposer pendant le nombre de roulement(les autres équipes vont tourner)
  • ----l'équipe de 07-14h , fera aussi 20h00 et 00h-07h(continue jusqu'au lendemain)
  • ---- l'équipe de 14h-20h fera le lendemain de 07-14h
C'est une seule équipe par quart de service , il y'a un quart de service de répos entre les services de quart sauf pour celui qui a fait 00h-07h.

par ailleurs c'est l'équipe de 20h-00h qui continue jusqu'au lendemain 00h-0700.

1er problème : 4 horaires et tu n'en utilises que 2 ! soit tu utilises les 4, soit tu dis pourquoi 2 ne sont pas utilisés.

Ca doit être rempli en fonction du nombre d'agents et les conditions énumérées ci dessus. "X" devant un agent sur une horaire(plage) montre que cet agent est en service à cette heure, s'il n'y a de x, c'est que l'agent est en répos

Sur la feuille QUART

En outre, passons sur la feuille Quart, je ne vois rien d'illustré du tout !

Mais tu as des explications, inutiles car elles n'expliquent rien ! L'explication réside dans la règle qui doit être appliquée pour produire la série résultante. Tu indiques juste le maillon suivant. Tu ne prolonges pas la suite jusqu'à ce qu'elle revienne à la situation de départ (ce qui doit être le cas s'il s'agit bien d'un cycle). Et l'extrapolation sur tes indications ne permet pas de boucler...

Et tu n'envisages que 4 cas alors que ton sélecteur en produit 9 !

J'espère les détails fourni plus haut répond à cette quotation.

Résumons-nous : 4 points de départ, 9 cas de traitement, à combiner.

Les règles de traitement devant être appliquées dans chacun des cas ne sont pas édictées.

Et aucune illustration de chacun des cas possible, sur le mois ou sur la période suffisante pour appréhender la logique de la série, n'est fournie.

Pour finaliser, le tableau de service se fait par mois, puis par équipe et par quart: le roulement est perpetuel dans le mois sauf en cas de maladie ou d'absence(où ca peut exceptionnement changé). le nombre correspondant au nombre de roulement va se rélever par service quart quand l'équipe qui a finit à 07h va se reposer quand les autres tournent entre eux.

NB: quelqu'n soit le roulement, l'équipe de 07-14h fait aussi 20h-00h+00h-07h du lendemain; l'équipe de 14h-20h fait le lendemain 07-14h puis 20h-00h+00h-07h et se repose et ca contine ainsi jusqu'à la fin du mois.

plus il y'a d'agents plus le nombre de roulement peut augmenter plus le nombre de creneau de repos va augmenter. mais il faut au mois x agent pou x roulement et couvrir forcement 4 creneaux.

J'espère que c'est un peu plus clair....

Cordialement.

NB- Et ce n'est pas en répliquant le sujet que tu vas mieux avancer !

[/quote]

Bon ! là le 13 est devenu 14 ! On peut s'en accommoder sans trop de mal, mais il est sûr qu'avec des détails qui ne cessent de changer on a du mal à accrocher à quelque chose de solide et stable.

Et on a l'air aussi de basculer de agent à équipe... ?

Elément tout à fait nouveau : on a une vacation qui couvre un Quart et une autre 3 Quart... !

En l'état on gagnerait à travailler avec 07-14 et 14-07 !! Peu importe, ce qui est clair (je ne prends que le cas 3 décrit dans ton fichier), c'est que cette nouveauté est en contradiction avec la description faite dans le fichier !!!

Je ne saurais donc trop insister pour que tu illustres in-extenso le résultat à obtenir pour tous les cas à traiter : mentions dans la feuille Menu Principal, qui est donc la situation de départ à elle-seule, et résultat à obtenir dans la feuille Quart (résultat complet, afin qu'on ne puisse interpréter à tort !)

Cordialement.

Réçu. Les infos ne changent pas , certainement que j'ai du mal à expliquer clairement.

Gardons cela en agent(oublions l'histoire des équipes) car c'est le copie de l'agent introduit à la feuille MENU PRINCIPAL qui fera copier dans le tableau de la feuille QUART, avec les quarts du premier lundi de la première semaine.

En l'état on gagnerait à travailler avec 07-14 et 14-07 !! Peu importe, ce qui est clair (je ne prends que le cas 3 décrit dans ton fichier), c'est que cette nouveauté est en contradiction avec la description faite dans le fichier !!!

: je ne comprends pas trop votre question à ce niveau : par jour (du 1er à la fin du mois) il y'a la vacation de 00:07, 07:14,14:20 et 20:00. C'est juste que quelque soit le cas de 3 à 6 si un agent fait 00:07 (c'est qu'il a fait le tour de toutes les vacations au total au par avant), il va donc se reporter et attendre que tout le monde fasse le complet pour réprendre son tour de nouveau. 2; le début réel après le repos se passe de 14:20, ensuite repos de 20:00+00:07(jour suivant)ensuite reprise de 07:14 puis repos de 14:20 ensuite reprise de 20:000+00:07(jour suivant) puis se repose le temps necessaire pour les autres de poursuivre.

cas 3: si agent 1 a fait 00:07(donc de 20h d'hier jusqu'à ce matin), il se repose pendant les vacations suivantes : 07:14; 14:20; 20:00+00:07;07:14 et le cycle reprend à partir de 14h-20h(se repose 20h-00h+00-07) et reprend le lendemain 07:14(se repose de 14h-20h)et reprend de 20h-00h+00-07 et se repose sur les vacations 07:14; 14:20; 20:00+00:07;07:14 puis le cycle reprend jusqu'à la fin du mois et continu le mois suivant(mais notre tableau est mensuel mais affiché par vacation hebdomadaire)

cas 4 : avec un agent de plus que le cas 3 donc il faut compter un H24(07:14; 14:20; 20:00+00:07;07:14) supplementaire de répos.

Cas 5 : avec deux angents de plus que le cas3 , il faut compter 2*H24 supplemenataire de répos

Cas6 : avec deux angents de plus que le cas3 , il faut compter 3*H24 supplemenataire de répos.

J'espère que c'est plus clair.

Resultats recherchés :

1. Copie des agents de la feuille MENU PRINCIPAL avec leurs vacations(données X dans les colonnes 00:07; 07:14, 14:20, 20:00) à noter que celui fait 07:14 fais systématiquement 20:00 vers le tableau de laa feuille Quart

2.afficher les tableaux des autres sémaines(semaine avec au moins un jour appartenant au mois) et les remplir en fonction de la liste des agents dans le premier tableau

3. Poursuire le cycle de vacation dans les autres tableaux pour tous les agents avec les mêmes conditions comme une suite des règles par cas désignés ci-dessus.

Je m'excuse d'avance. Je sais que j'ai du mal à être précis , c'est d'ailleurs pour celà que j'ai scindé mon premier post en petit post.

Merci!

Bonsoir,

Ton sujet : pour Noël pas vraiment un cadeau !

C'était pas vraiment le jour que je continue à chercher à décoder... mais je réitère ma proposition antérieure :

Je ne saurais donc trop insister pour que tu illustres in-extenso le résultat à obtenir pour tous les cas à traiter : mentions dans la feuille Menu Principal, qui est donc la situation de départ à elle-seule, et résultat à obtenir dans la feuille Quart (résultat complet, afin qu'on ne puisse interpréter à tort !)

D'une part on pourra s'appuyer sur le résultat à atteindre dans chaque cas, matérialisé sur la feuille, pour étudier la question, et d'autre part cela devrait te prendre plutôt moins de temps de le faire ainsi. On pourrait alors avancer plus vite.

Cordialement.

Bonsoir,

j'ai été occupé dans la journée,

J'ai modifié le tableau avec le cas de roulement = 3 avec trois agents(formule avec si) et le roulement à 4(une partie avec si mais pour 13h-20h qui dépend du temps de repos, je n'arrive pas à trouver).

J’enverrai pour les autres roulements au fur et à mesure.

Merci!

18copie-de-shift.xlsx (60.33 Ko)

Tu es sûr de tes cycles ?

Il n'y a pas de cycle régulier faisant alterner tes 3 agents !

Cycle à rupture pour une part qui impliquerait une durée supérieure au mois pour s'équilibrer...

2 cycles complètement différents, on est donc dans une composition faite en partie à la carte.

Très arbitraire !

Tant que je n'ai pas un cycle déductible sans ambiguïté à partir de critères précis...

NB- Et en multipliant les avatars de ton sujet je pense que tu risques plus de brouiller les cartes que d'éclaircir la situation.

Bonjour,

Si les cycles sont réguliers pour tous les cas de roulement sauf cas exceptionnel ou de force majeur. C'est pour cela que j'ai mis en formule conditionnel pour le roulement à 3 et à 4 .

quart 1 : 00-07

quart2 : 07-14

quart 3 : 14-20

quart4 : 20-00

Conditions valables pour tous les roulements tous les roulements :

Condition 2 : Un agent qui fait le quart2 il se repose au quart3 et reprend au quart4 et continue sur le quart1(du lendemain)

Condition 3 : un agent fait le quart3 il se repose le quart4+le quart1 du lendemain et il reprend au quart2 du lendamain

Condition 4 : Un agent qui fait quart4, il continue avec le quart 1 du lendemain

Conditions liées au cas de roulement :

Cas roulement à 3 :

Condition 1 : un agent qui fait quart1, il se repose une journée(avec la journée allant de 00h-07h=quart1+quart2+quart3+quart4) et reprend au quart2 du lendemain.

Cas roulement à 4 :

Condition 1 : un agent qui fait quart1, il se repose deux journées complètes et reprend au quart2 du lendemain.

Cas roulement à 5 :

Condition 1 : un agent qui fait quart1, il se repose trois journées complètes et reprend au quart2 du lendemain.

Cas roulement à 6 :

Condition 1 : un agent qui fait quart1, il se repose trois journées complets et reprend au quart2 du lendemain.

Voici le cycle au complet que les agents doivent suivre selon les roulements. Il est à noter que pour un roulement à 3, il faut au moins 3 agent, pour 4 au moins 4 agent ainsi de suite..

NB- Et en multipliant les avatars de ton sujet je pense que tu risques plus de brouiller les cartes que d'éclaircir la situation.

Je ne comprends pas ce que vous entendez par avatars ici.

Merci!!!

Reprenons rapidement :

Si l'on suit tes conditions 2 à 4, applicables à tous (appelons tes quarts : a, b, c, d), on obtient la structure suivante :

2017 12 27 145558

Tu noteras que le cycle se déroulant sur 3 jours, permet une rotation régulière de 3 agents et s'équilibrera sous 3 semaines (21 jours).

[nb- Je n'examine que sous l'angle mathématique, hors caractère social... ]

En introduisant une condition 1 spécifique au roulement à 3, qui entre en contradiction avec les conditions précédentes : car si l'agent a fait quart1, c'est qu'il a fait également quart2 et quart4 la veille, le lendemain tu lui fais faire quart2, qui implique quart4 et quart1 le jour suivant... jamais de quart3 donc. Cette condition ne fait que casser le cycle régulier induit sur 3 jours pas les précédentes, et te conduit donc à parsemer ton planning d'irrégularités arbitraires pour le combler.

Cordialement.

Ohhhhhhh

Pardon::::::: Je suis vraiment déslolé. J'ai fait une bétise.

quart1 le jour suivant... jamais de quart3

: C'est quart 3 après quart1.. je ne sais vraiment pas ce qui m'est arrivé.

Conditions liées au cas de roulement correcte)

Cas roulement à 3 :

Condition 1 : un agent qui fait quart1, il se repose une journée(avec la journée allant de 00h-07h=quart1+quart2+quart3+quart4) et reprend au quart3 du lendemain.

Cas roulement à 4 :

Condition 1 : un agent qui fait quart1, il se repose deux journées complètes et reprend au quart3 du lendemain.

Cas roulement à 5 :

Condition 1 : un agent qui fait quart1, il se repose trois journées complètes et reprend au quart3 du lendemain.

Cas roulement à 6 :

Condition 1 : un agent qui fait quart1, il se repose trois journées complets et reprend au quart3 du lendemain.

Après le répos journalier, la réprise se fait toujours à quart3 pour tous les roulements.

Je m'execuse vraiment!!!!

Bonjour,

Je vous sais très occupé, déjà merci pour les efforts.

Mais devrais je comprendre que l'option que je demande n'est pas faisable avec excel ?

Ca pourra me servir pour que je le fasse de façon manuelle.

Bonjour,

Rien n'est infaisable... sauf le café qu'Excel refuse de faire . Pas eu le temps de regarder les autres cas, mais j'y reviens dès que possible. A+

Si je comprends bien, tu valides le schéma de mon post du 27 à 13h15, et les cas 4, 5 et 6 seraient semblables avec adjonction de jours de repos intermédiaires.

Ce qui donnerait pour le cas 4 :

2017 12 30 001008

Vu les détours qu'on a pris pour arriver là, je dois t'avouer que cela me paraît un peu trop simple ! Mais si tu confirmes on pourra bâtir rapidement un dispositif...

NB- Ne te laisse pas perturber par ma disposition des jour en colonne (au lieu de ta disposition en ligne)...

Cordialement.

Rechercher des sujets similaires à "offset vba"