Tableau Excel avec macro

Bonjour à tous

J'aimerais en cliquant sur les cellules qui portent le nom que les 3 lignes en dessous soient masquées et ensuite affichées au 2 ème clic sur le même nom

Le tableau ci-dessous est un exemple pour mon projet futur qui sera plus grand

J'ai téléchargé une macro qui fonctionne très bien pour le nom (Nicole) et pour les lignes 9-10-et 11.

J'aimerais que cela fonctionne de la même manière pour les noms des lignes 11-15-19 et plus dans mon futur projet.

Voici la formule installée :

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal c As Range, Cancel As Boolean)

Cancel = True

Select Case c.Address

Case "$B$8": Rows("9:11").EntireRow.Hidden = Not Rows("9:11").EntireRow.Hidden

End Select

End Sub

Est-il possible de m’aider ???

D’avance merci

Eugène

9test-macro.xlsm (18.40 Ko)

Bonjour,

tu recopies cette ligne sous celle-ci en changeant les valeurs

Case "$B$8": Rows("9:11").EntireRow.Hidden = Not Rows("9:11").EntireRow.Hidden

par exemple

Case "$B$8": Rows("9:11").EntireRow.Hidden = Not Rows("9:11").EntireRow.Hidden
Case "$B$12": Rows("12:14").EntireRow.Hidden = Not Rows("12:14").EntireRow.Hidden

Ce moyen en valable pour quelques lignes mais pas dans mon tableau définitif qui contient au moins 1500 lignes.

Je te remercie quand même pour ta réponse, mais à tu la solution à mon classeur????

En fait chaque fois que je crée un nouveau nom, dans le classeur il ajoute 3 lignes en dessous du nom.

Et cela à chaque nom je peux ouvrir ou masquer les données.

Merci d'avance

Bonjour Eugène, le forum,

je te retourne ton fichier modifié :

12test-macro.xlsm (17.15 Ko)

je te laise faire les tests.


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour,

A mon avis, vous devriez revoir la conception de votre tableau qui n'est pas logique. Un champ doit contenir des éléments de même nature. Votre champ "Noms" contient soit des noms, soit une rue, soit un code postal , ….

Vous n'aurez que des difficultés à gérer un tableau de ce type.

Je te remercie quand même pour ta réponse, mais à tu la solution à mon classeur????

Oui, voici

Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal c As Range, Cancel As Boolean)
Dim ligne As Long
    Cancel = True
    If c.Column = 2 And c.Row Mod 4 = 0 Then
        ligne = c.Row
        Rows(ligne + 1 & ":" & ligne + 3).EntireRow.Hidden = Not Rows(ligne + 1 & ":" & ligne + 3).EntireRow.Hidden
    End If
End Sub

Bonjour Eugène, le forum,

je te retourne ton fichier modifié :

Test macro.xlsm

je te laise faire les tests.


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

C'est tout à fait ce que je voulais, un grand merci et à plus peut-être

Eugène

Bonjour,

A mon avis, vous devriez revoir la conception de votre tableau qui n'est pas logique. Un champ doit contenir des éléments de même nature. Votre champ "Noms" contient soit des noms, soit une rue, soit un code postal , ….

Vous n'aurez que des difficultés à gérer un tableau de ce type.

Merci de me répondre mais la solution a été trouvée.

Eugène

Je te remercie quand même pour ta réponse, mais à tu la solution à mon classeur????

Oui, voici

Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal c As Range, Cancel As Boolean)
Dim ligne As Long
    Cancel = True
    If c.Column = 2 And c.Row Mod 4 = 0 Then
        ligne = c.Row
        Rows(ligne + 1 & ":" & ligne + 3).EntireRow.Hidden = Not Rows(ligne + 1 & ":" & ligne + 3).EntireRow.Hidden
    End If
End Sub

Merci de ton aide la solution a été trouvée

Grand merci

Eugène

@Eugène

j'étais en pause, et j'viens d'lire tes derniers posts, dont celui de 16:05.

tu a écrit :

C'est tout à fait ce que je voulais, un grand merci et à plus peut-être

merci pour ton retour ! pour passer le sujet en résolu, clique sur près de (coin haut droit du post); ça permet aussi de clôturer le fil de la discussion (toi seul peut le faire, car c'est toi qui a créé ce sujet).

tu pourras voir que la coche apparaît aussi à droite du titre du sujet, à cet emplacement :

screen

bonne fin de week-end, et peut-être à bientôt.

dhany

Bonjour Eugène, le forum,

je te retourne ton fichier modifié :

Test macro.xlsm

je te laise faire les tests.


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour dhany,

Sans vouloir abuser de tes connaissances en excel, est il possible de trier les noms ou bien les dates soit de A-Z ou les dates du plus ressent au plus ancien tout en gardant les données mise dans les lignes en dessous comme mon tableau provisoire.

Si tu as la solution merci d'avance???.

Eugène

Bonjour Eugène,

pour ta nouvelle demande, envoie un autre fichier avec des données fictives pour 10 personnes (pas moins, ni plus), et non déjà trié.

aucune cellule vide, sauf en colonne A : une date à gauche de chaque nom, et 3 cellules vides en dessous (donc 10 dates en tout).

bien sûr, mets des données différentes, pas toutes les mêmes ! ainsi, le résultat du tri fait par la macro sera évident.

j'essayerai de voir si je trouve une solution (mais ça prendra pas mal de temps, et c'est sans garantie).

dhany

Bonjour,

je me permets de reprendre le fil

pour trier :

Sub trier()
For i = 8 To Cells(Rows.Count, "B").End(xlUp).Row Step 4
    For j = i To Cells(Rows.Count, "B").End(xlUp).Row Step 4
        If Cells(i, "B") > Cells(j, "B") Then
            Rows(j & ":" & j + 3).Cut
            Rows(i).Insert Shift:=xlDown
        End If
    Next
Next
End Sub

Si tu avais beaucoup de données, on pourrait passer à un quicksort, mais cela compliquerait la macro qui in fine ici est assez simple !

5test-macro.xlsm (18.75 Ko)

Bonjour Eugène,

pour ta nouvelle demande, envoie un autre fichier avec des données fictives pour 10 personnes (pas moins, ni plus), et non déjà trié.

aucune cellule vide, sauf en colonne A : une date à gauche de chaque nom, et 3 cellules vides en dessous (donc 10 dates en tout).

bien sûr, mets des données différentes, pas toutes les mêmes ! ainsi, le résultat du tri fait par la macro sera évident.

j'essayerai de voir si je trouve une solution (mais ça prendra pas mal de temps, et c'est sans garantie).

dhany

Je refait le fichier comme tu me le demande et je l'envoi sur le site

Eugène

Bonjour Eugène, le forum,

je te retourne ton fichier modifié :

Test macro.xlsm

je te laise faire les tests.


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Voila comme tu me la demandé je arrangé mon fichier fictif avec le même nom et j'ai mis des dates différentes et aussi d'une autre année.

J'espère que cela te convient et encore merci pour ton aide

Maintenant la macro du tri pour les dates peut être uniquement du plus récent au plus anciens et commandé par un bouton.

Si c'est possible avec un autre bouton pour les noms de A à Z ce n'est pas primordiale mais si possible tant mieux.

3test-macro.xlsm (21.69 Ko)

@Eugène

j'ai le sentiment que mes réponses ne t'intéressent pas trop ! C'était pour répondre aussi à la perplexité de Dhany

j'essayerai de voir si je trouve une solution (mais ça prendra pas mal de temps, et c'est sans garantie).

... cela ne lui ressemble pourtant pas !

je vais donc laisser mon compère Dhany que je salue aux commandes

@Eugène

j'ai le sentiment que mes réponses ne t'intéressent pas trop ! C'était pour répondre aussi à la perplexité de Dhany

j'essayerai de voir si je trouve une solution (mais ça prendra pas mal de temps, et c'est sans garantie).

... cela ne lui ressemble pourtant pas !

je vais donc laisser mon compère Dhany que je salue aux commandes

Je m'excuse mais j'ai téléchargé ton fichier modifié et cela ne fonctionne pas très bien.

Bien sur j'ai gardé ta formule en suspens pour la modifier et l'adapter à mon fichier.

Je garde cela en suspens pour voir ce que ton compère Dhany me propose.

Cela dit encore merci de ta réponse et excuse moi pour le retard de ma réponse.

Eugène

je n'ai trié que les noms car je n'avais pas de date !

Voici

Sub trier_date()
For i = 4 To Cells(Rows.Count, "A").End(xlUp).Row Step 4
    For j = i To Cells(Rows.Count, "A").End(xlUp).Row Step 4
        If Cells(i, "A") > Cells(j, "A") Then
            Rows(j & ":" & j + 3).Cut
            Rows(i).Insert Shift:=xlDown
        End If
    Next
Next
End Sub

Sub trier_nom()
For i = 4 To Cells(Rows.Count, "B").End(xlUp).Row Step 4
    For j = i To Cells(Rows.Count, "B").End(xlUp).Row Step 4
        If Cells(i, "B") > Cells(j, "B") Then
            Rows(j & ":" & j + 3).Cut
            Rows(i).Insert Shift:=xlDown
        End If
    Next
Next
End Sub
2test-macro-1.xlsm (21.52 Ko)

Bonjour Eugène, Steelson,

Steelson a trouvé une solution qui marche très bien, et qui est bien plus simple que celle que je pensais faire ; pour les 2 subs, je propose quand même ces 5 petits changements : déclaration des variables ; gel de la mise à jour de l'écran ; calcul de la dernière ligne une seule fois (dans la variable n) ; .Resize(4) ; compléter les 2 Next avec la variable associée ; ce qui donne :

Option Explicit

Sub trier_date()
  Dim i&, j&, n&: Application.ScreenUpdating = 0
  n = Cells(Rows.Count, "A").End(xlUp).Row
  For i = 4 To n Step 4
    For j = i To n Step 4
      If Cells(i, "A") > Cells(j, "A") Then
        Rows(j).Resize(4).Cut
        Rows(i).Insert Shift:=xlDown
      End If
    Next j
  Next i
End Sub

Sub trier_nom()
  Dim i&, j&, n&: Application.ScreenUpdating = 0
  n = Cells(Rows.Count, "B").End(xlUp).Row
  For i = 4 To n Step 4
    For j = i To n Step 4
      If Cells(i, "B") > Cells(j, "B") Then
        Rows(j).Resize(4).Cut
        Rows(i).Insert Shift:=xlDown
      End If
    Next j
  Next i
End Sub

si plus tard tu auras beaucoup plus de données et que ce tri bulle devient lent, Steelson pourra sûrement faire un quicksort.

2test-macro.xlsm (24.05 Ko)

dhany

Rechercher des sujets similaires à "tableau macro"