Bloquer cellule VBA

jai encore une petite question...

comment appliquer la meme macro a toutes les feuilles du classeur ???

17essai-plan.zip (59.79 Ko)

Bonsoir

La macro est à installer dans le module ThisWorkbook

La macro Calculs (qui à mon avis ne sera jamais appelée) est à placer dans un module standard

Pour appeler la macro Calculs tu testes que l'on a modifié qu'une seule cellule et que l'adresse de cette seule cellule correspond à une zone de .... 5 cellules

En plus si elle est utilisée va entrer en conflit avec ta macro Change

Fais un test :

Ecris en B2

Ecris en P2,P3,P4

Ensuite exécute la macro Calculs

Expliques ce que tu veux faire avec

Deja un grand merci pour ton aide.

Avec calcul : je voudrais que quand j'écrive quelque chose dans B2, je voudrais que la valeur se reporte automatiquement en B6, puis C2 dans C6, et ainsi de suite jusqu'en J.

Je dois effectuer cela pour plusieurs lignes : la 2 se reporte dans la 6, la 3 dans la 7 et la 4 dans la 8 pour x colonnes.

Au depart je faisais avec ca :

Private Sub Worksheet_Change(ByVal Target As Range)

Range("A6:J6").Value = Range("A2:J2").Value

Range("A7:J7").Value = Range("A3:J3").Value

Range("A8:J8").Value = Range("A4:J4").Value

End Sub

mais le problème cest qu'apparemment c'est très lourd (car là cest un extrait et je dois l'effectuer pour 8 lignes différentes dans mon vrai fichier). et jai une contrainte : je ne peux pas ordonner les lignes

mais je dois coller les memes lignes aux memes endroits dans toutes les feuilles du fichier

en faisant "calcul", ca semblait plus rapide mais là ca ne marche plus :s

Voila je sais pas si jai été tres claire....

encore merci pr ton aide

Bonsoir

Un peu compliqué

A vérifier

Quelques remarques dans le code

salut !

en fait cest exactement ca que je voulais !!!

mais peux tu me dire si je peux adapter ce que tu as fait (et qui est génial) mais au lieu que ca copie des blocs de colonnes de 3 lignes (prenons comme exemple B2:B4 qui se colle en B6:B8), coller ligne par ligne cest a dire : B2 : F2 en B6 : F6, etc etc.

car en fait dans mon vrai fichier jai 10 Personnes (P1 a P10) et les copier coller ne sont pas ordonnés comme dans le fichier exemple.

est ce que tu peux me dire si cest faisable ?

merci

Bonjour

Mokia a écrit :

exemple B2:B4 qui se colle en B6:B8), coller ligne par ligne cest a dire : B2 : F2 en B6 : F6

Expliques un peu mieux car pour moi c'est la même chose

Dans tous les cas

B2 ira en B6

C2 ira en C6

etc ....

excuse moi , j'explique mal

jai fait un petit fichier du coup pour que tu vois comment mes lignes ne sont pas ordonnées et c'est une contrainte, je ne peux pas les ordonner

13essai-plan-2.zip (36.71 Ko)

Bonjour

Ton problème devient compliqué à gérer

Questions

  • Ton tableau est il définitif ?
  • Cela sera toujours que dans ce sens les recopies ?
  • Il n'y aura que ces relations ?
  • La règle du maximum (2 cellules) est à appliquée sur tous les tableaux ?
  • Cela sera toujours 2 --> 6, 3 --> 10, 4 --> 14 et 7 --> 11 ?

bonjour !

oui je me rends compte peu à peu que ca se complique

alors pour te repondre, jai refait un tableau definitif.

jai tenté d'écrire un truc aujourdhui, qui marche en partie. en effet, cela ne marche pas pour le bloc 1 et le bloc 2, et je ne sais pas pourquoi. Est ce que tu arrives a comprendre pourquoi ??

en fait pour les blocs 1, 2 et 3, le blocage se fait pour plus de 2 cellules remplies et pour le bloc 4, le limite est de 6.

15xxxxx.zip (40.81 Ko)

Bonjour

Modifies le calcul de Plage

Set Plage = Cells((((Target.Row - 8) \ 5) * 5) + 8, Target.Column).Resize(3, 1)

ah oui ca a résolu le probleme pour le bloc 2 mais pas pour le 1 grrrr

Bonjour

Essayes cette macro

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Range, Plage As Range, plage2 As Range

    Application.EnableEvents = False

    If Target.Count = 1 And Not Application.Intersect(Target, Range("B:W")) Is Nothing Then
      If Target.Row < 21 Then
        'Définition des plages à contrôler, intitulées "Intérim", "validation des dérogations" et "Signataires"
        Set Plage = Cells((((Target.Row - 8) \ 5) * 5) + 8, Target.Column).Resize(3, 1)
        'Blocage du remplissage
        If Application.CountA(Plage) > 2 Then
          MsgBox "Permanence minimale atteinte!"
          Application.Undo
        End If
      Else
        'Définition de la dernière plage à contrôler intitulée "Permanence encadrement du CDG"
        Set Plage = Cells(23, Target.Column).Resize(12, 1)
        'Blocage du remplissage
        If Application.CountA(Plage) > 6 Then
          MsgBox "Permanence minimale atteinte!"
          Application.Undo
        End If
      End If

      'Recherche des identifiants correspondants dans la colonne A
      Set C = Columns(1).Find(Range("A" & Target.Row).Value, LookIn:=xlValues, lookat:=xlWhole, SearchDirection:=xlPrevious)
      If Not C Is Nothing And C.Row > Target.Row Then
        'Copie du contenu des cellules modifiées
        Cells(C.Row, Target.Column) = Target.Value
      End If
    Else
      Application.Undo
    End If
    Application.EnableEvents = True
End Sub

un grand grand grand merci landais à toi le palois pour ton aide !!!!!!

Bonjour,

jai encore besoin d'aide !!!!! svp !!!!!

Mon fichier marchait bien mais jai du placer des conditions supplèmentaires car cela ne gérait pas tous les cas de figure.

En effet, jai 4 cas de figure différents, dont 2 que jai deja "gérés" (gérer est un grand mot ! ) :

1. Cas 1 : on n'a pas atteint 50% des effectifs dans le bloc 4

1.1. la personne à ajouter fait déjà partie d'un autre bloc (1 ou 2 ou 3)

1.2. la personne à ajouter ne fait pas déjà partie d'un autre bloc (1 ou 2 ou 3) et qu'elle se trouve uniquement dans le bloc 4

2. Cas 2 : on a atteint 50% des effectifs dans le bloc 4

2.1. la personne à ajouter fait déjà partie d'un autre bloc (1 ou 2 ou 3)

2.2. la personne à ajouter ne fait pas déjà partie d'un autre bloc (1 ou 2 ou 3)

J'ai réussi à écrire un truc pour les cas 1.1 et 2.1, mais pas pour les autres. Est ce quelqu'un pourrait m'aider ou me donner des pistes de travail ??

Merci beaucoup !

29test33.zip (41.47 Ko)

Bonjour

En regardant ton code c'est pareil qu'avant

En dessous ou égale à 6 le bloc 4 accepte tout

Au dessus de tout le bloc 4 n'accepte plus rien (une petite différence : Si l'ajout ne vient pas d'une recopie ---> Pas de message)

Ou alors il y a quelque chose qui m'échappe

en fait le problème cest que je suis obligée d'écrire 2 autres conditions car avec le code que tu m'as fait, quand le bloc 4 contenait 6 cases pleines, et que je remplissais une case d'un autre bloc (comme par exemple P7) dont la valeur se reportait automatiquement dans le bloc 4 (vu que cest la présence de la meme personne) : le problème cest que ce dernier ajout n'était pas bloqué alors que le bloc 4 contenait deja 6 cases remplies.

le code marchait bien en fait quand tu consideres chaque bloc indépendamment les uns des autres mais pas en considerant que certaines cases sont liées

du coup je me suis rendue compte des 4 cas de figure quil existe mais je narrive pas a en écrire 2

et maintenant que jai fait des modif, le blocage ne seffectue pas quand tu consideres que le bloc 6 individuellement parlant. quand tu ajoutes une valeur dans une case non liée à une case d"un autre bloc (1, 2 ou 3), le blocage ne marche plus...

vosi tu ce que je veux dire ? dsl mes explications ne sont pas top

Bonjour

A tester

oui cest exactement ca sauf que (je nai pas bien expliqué dentrée dsl) le salarié qui est dans le fichier un jour doit être affecté à tous les blocs obligatoirement. il ne peut pas etre présent et ne faire partie que d'un bloc

par exemple dans le fichier joint le P8 ne peut pas être dans le bloc 3 mais pas dans le 4

ca je sais pas comment faire

Bonjour

Pas claire ton histoire

Mokia a écrit :

le salarié qui est dans le fichier un jour doit être affecté à tous les blocs obligatoirement.

Le bloc 4 permet d'avoir 6 salariés au maximum alors que les autres blocs n'en prennent que 2, alors expliques moi comme tu fais pour caser les salariés du bloc 4 dans les autres blocs

Sinon tu remplis le bloc1 et tu recopies les mêmes dans tous les autres blocs

Comme cela les salaries feront tous les blocs

Mokia a écrit :

le P8 ne peut pas être dans le bloc 3 mais pas dans le 4

En traduction simple cela veut dire quoi ?

ok en simple

si tu regardes le fichier excel que jai joint le salarié P8 ne peut pas être absent en bloc 3 = cellule C20 et pas en bloc 4 = cellule C34. S'il est absent, il l'est partout.

Donc en fait jaimerais que si jessaye de lajouter en C20 alors que le taux dabsence est deja a 50% en bloc 4 (C23:C34), ce soit impossible de lajouter dans le bloc 3 et par conséquent dans le bloc 4 aussi.

Quand un salarié de bloc est absent dans un bloc, il doti letre obligatoirement partout car il est dans un autre service ou en vacances.

D'où des cellules liés selon la colonne A.

Jespere que cest plus simple là, désolée cest tarabisquoté !

Rechercher des sujets similaires à "bloquer vba"