Décaler plage de cellule vers la gauche avec condition

Résolu/Fermé
gougouks Messages postés 9 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 15 février 2019 - 14 févr. 2019 à 14:43
gougouks Messages postés 9 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 15 février 2019 - 15 févr. 2019 à 09:13
Bonjour à tous,

Je sollicite votre aide car je ne maîtrise pas du tout VBA et que c'est surement grâce à VBA que mon problème sera résolu.

L'illustration de mon problème est le suivant:



Avant le second tableau, je demande le nombre de personne (il peut y en avoir au plus 2).
Ce que je veux est: Si la cellule B9 contient 1 (donc 1personne) alors:
--->Supprimer/masquer UNIQUEMENT les cellules C10 à C16 qui concernent la personne 2;
--->Décaler la plage de cellules D10:H16 vers la gauche (c'est à dire remplacer/prendre la place des cellules C10 à C16.
--->Garder la mise en forme de la plage de cellule à décaler.

Comme il y a des tableaux au-dessus et en dessous du tableau concerné par les modifications, une suppression de la colonne C n'est pas à envisager.

J'espère avoir été claire dans la description de mon problème :)

Merci beaucoup par avance pour votre aide :D

1 réponse

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
14 févr. 2019 à 18:08
Bonjour,

Ton explication est très claire. Je te propose :
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("B9")) Is Nothing Then
        If Range("B9").Value = 1 Then Range("C10:C16").Delete Shift:=xlToLeft
    End If
End Sub

à placer dans le code associée à ladite feuille.

Toutefois, pourquoi ne pas simplement hachurer (par mise en forme conditionnelle) les cellules C10 à C16 si B9=1 ?

A+
0
gougouks Messages postés 9 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 15 février 2019
14 févr. 2019 à 19:39
Merci beaucoup! Ça fonctionne très bien :D

Je préfère ne pas hachurer car j'ai d'autres cellules à décaler en fonction de la réponse en B9. C'est pour optimiser mon document :)

J'ai maintenant 2 autres questions:

1) J'ai essayé d'appliquer ton code pour une autre plage de cellules qui dépend aussi de la valeur en B9 mais cela ne fonctionne pas...
J'ai directement copier/coller le code est juste changé la plage "C10:C16" en "C30:C35".

2) Admettons que la personne ait tapé en B9 la valeur 1 et s'aperçoit qu'elle s'est trompée. Elle tape donc 2. Le souci ici est que Range("C10:C16") n'existe plus! Donc comment est ce que je fais "réapparaître" ce qui a été supprimé?
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
14 févr. 2019 à 20:10
1) Ce n'est pas normal
2) Il ne faut pas se tromper ! Utilise données de validation --> 1 ou 2 et ce code devrait aller :
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("B9")) Is Nothing Then
        Select Case Range("B9").Value
            Case 1
                Range("C10:C16").Delete Shift:=xlToLeft
            Case 2
                Range("C10:C16").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
                Range("C11").Value = "Personne 2"
        End Select
    End If
End Sub
0
gougouks Messages postés 9 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 15 février 2019
15 févr. 2019 à 09:13
Merci encore une fois pour ta réponse. Ca fonctionne à merveille!

J'avais mal adapté le code à mon cas d'où le fait que ça ne fonctionnait pas.
0