Offset avec VBA Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
s
stoure
Membre fidèle
Membre fidèle
Messages : 270
Appréciations reçues : 3
Inscrit le : 20 décembre 2016
Version d'Excel : 2007

Message par stoure » 24 décembre 2017, 19:36

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!
Avatar du membre
Patrice33740
Membre fidèle
Membre fidèle
Messages : 383
Appréciations reçues : 29
Inscrit le : 27 juillet 2014
Version d'Excel : FR, 2007, 2003, 2013, 2016

Message par Patrice33740 » 24 décembre 2017, 20:05

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
Cordialement
Patrice
s
stoure
Membre fidèle
Membre fidèle
Messages : 270
Appréciations reçues : 3
Inscrit le : 20 décembre 2016
Version d'Excel : 2007

Message par stoure » 24 décembre 2017, 20:26

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.
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 444
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 25 décembre 2017, 00:00

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... :mrgreen:

Cordialement.
s
stoure
Membre fidèle
Membre fidèle
Messages : 270
Appréciations reçues : 3
Inscrit le : 20 décembre 2016
Version d'Excel : 2007

Message par stoure » 25 décembre 2017, 00:56

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!
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 444
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 25 décembre 2017, 02:00

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 ! :wink: à condition de respecter des règles en la matière...

Cordialement.
2 membres du forum aiment ce message.
s
stoure
Membre fidèle
Membre fidèle
Messages : 270
Appréciations reçues : 3
Inscrit le : 20 décembre 2016
Version d'Excel : 2007

Message par stoure » 25 décembre 2017, 08:12

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 .
Shift.xlsx
(29.7 Kio) Téléchargé 44 fois
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 444
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 25 décembre 2017, 11:28

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 ! :mrgreen:
1 membre du forum aime ce message.
s
stoure
Membre fidèle
Membre fidèle
Messages : 270
Appréciations reçues : 3
Inscrit le : 20 décembre 2016
Version d'Excel : 2007

Message par stoure » 25 décembre 2017, 13:08

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 ! :mrgreen:
[/quote]
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 444
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 25 décembre 2017, 15:09

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. :wink:
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 !!! :wink:

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.
1 membre du forum aime ce message.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message