Tri d'une plage avec lignes masquées (VBA)

hoerwind

XLDnaute Barbatruc
Bonjour,

J'aimerai une petite aide pour modifier ou compléter la macro sous la pièce jointe.

Cette macro (JNP, kjin ou autre ?) permet par double-clic dans la colonne B d'afficher et de masquer des lignes sur base de l'arborescence en colonne A.
Elle fonctionne parfaitement.

Le problème :
Lorsqu'une nouvelle ligne est saisie au bas de la plage (ABCD sous l'exemple joint), que la feuille est triée (menu Données - Trier) sans afficher préalablement toutes les lignes masquées, le tri ne se fait pas correctement et la macro ne remplit plus son rôle.

La solution que j'entrevois :
Empêcher le tri par la barre d'outils, uniquement pour cette feuille.
A l'enregistrement du fichier, afficher les lignes masquées, trier et afficher ce qui était affiché avant la sauvegarde.
Je n'y arrive pas par l'enregistreur de macro.

Il y a peut-être d'autres procédures pour obtenir le même résultat, mais je souhaiterai ne pas créer de bouton pour activer la macro, ni une macro qui fait le travail à chaque validation d'une saisie en colonne A.

Je vous en remercie d'avance.
 

Pièces jointes

  • TriBaseDeDonnees.zip
    21.1 KB · Affichages: 84

Modeste

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

Salut hoerwind,

Sans rien changer au code existant, mais en ajoutant la gestion de l'événement Worksheet_Change en colonne A ... en cas d'ajout, on affiche toutes les lignes et on trie.
Si ça te convient, il restera à retrouver l'élément ajouté (après le tri) pour compléter les autres colonnes.
Attention, évidemment, de ne pas laisser de lignes vides entre le dernier enregistrement existant et le nouveau (on pourrait vérifier via la macro aussi, si besoin). Refait le test avec ton ABCD (que j'ai supprimé) ou un autre.
 

Pièces jointes

  • TriEtInsertionBdD.zip
    21.7 KB · Affichages: 64

hoerwind

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

Salut Modeste,

Dès validation d'une valeur saisie au bas de la plage en colonne A, le tri s'effectue automatiquement.
Cela fonctionne, mais ce n'est pas exactement ce que je désire.

Je souhaite pouvoir saisir plusieurs lignes au bas de la colonne A, ainsi toutes les données de ces lignes jusqu'en colonne I, et ceci avant de trier.
J'explique le pourquoi :
Pour pouvoir spécifier ces données il faut souvent consulter d'autres données dans le tableau supérieur et celles-ci peuvent se situer à des endroits différents.
Le fait de pouvoir afficher localement des données et de les masquer par double-clic me permet de naviguer facilement pour les trouver.

Je préfère que le tri de la barre de menu soit désactivé à l'ouverture du fichier (et réactivé à la fermeture) et que le tri se fasse à l'enregistrement en cliquant sur l'icône de la barre d'outils Standard ou à la sauvegarde en cas de fermeture du fichier.

Vois-tu cette possibilité ?
Merci en tous cas de t'être intéressé à mon problème.
 

Modeste

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

Re,

Pour pouvoir spécifier ces données il faut souvent consulter d'autres données dans le tableau supérieur et celles-ci peuvent se situer à des endroits différents.
Le fait de pouvoir afficher localement des données et de les masquer par double-clic me permet de naviguer facilement pour les trouver.
A ce niveau, rien n'a changé: tu peux toujours afficher/masquer des lignes en double-cliquant en colonne B, après que le tri a été effectué. Je ne dois donc pas bien comprendre ton souci :confused:
En annexe, à toutes fins utiles, le même fichier avec, en prime, la nouvelle référence activée, après le tri (plus des commentaires dans le code). Ajouté aussi (mais mis en commentaire) les 3 lignes qui permettraient de convertir la nouvelle réf en majuscules.

Pour ce qui est de:
Je préfère que le tri de la barre de menu soit désactivé à l'ouverture du fichier (et réactivé à la fermeture)
Mon niveau de compétence en vba étant ce qu'il est, je préfère ne pas jouer à l'apprenti sorcier et évite de me lancer dans ce genre de manipulations, sans connaître précisément toutes les subtilités.
 

Pièces jointes

  • TriEtInsertionBdD (V2).zip
    23.1 KB · Affichages: 44

hoerwind

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

Re,

Merci beaucoup, mais les manipulations sont trop nombreuses lorsqu'il s'agit de créer cinq à six nouvelles lignes devant être triées à des endroits différents, avec le risque d'oublier d'en remplir l'une ou l'autre.

J'ai tout aussi fait d'insérer une ligne à l'endroit désiré et d'y saisir les données, ainsi plus besoin de trier.

J'avais une autre solution :
Créer un affichage personnalisé toutes les lignes affichées (menu Affichage), un autre toutes lignes masquées.
Ceci permet le tri par la barre de menu.
Mais comme je ne suis pas seul à utiliser ce fichier, il subsiste la possibilité d'oubli de l'affichage adéquat avant tri et ce risque je ne souhaite pas le courir.

Je comprends fort bien que tu ne souhaites pas jouer à l'apprenti sorcier, en gardant toutefois l'espoir de trouver une solution qui réponde à 100% à mes contraintes.
Encore merci pour l'aide, c'est déjà un grand pas en avant.
 

hoerwind

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

Salut Victor,

Excellent, comment n'y avais-je pas pensé !

Donc une macro qui, à l'enregistrement du fichier en cours de travail ou à la fermeture du fichier, affiche tout, trie et referme tout suffit.

Mais le problème est que la macro existante ne fonctionne plus après avoir protégé la feuille (sans mot de passe et uniquement le tri) !

Il y a-t-il une solution ?
 

hoerwind

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

Bonsoir,

Merci pour ce renseignement, mais étant nul en macros, je ne pourrais en tirer profit !

Serait-ce trop te demander de m'écrire cette macro, de préférence directement sur la pièce jointe sous le premier message ?
C'est pas urgent, prends ton temps.

Merci d'avance et bonne soirée.
 

Victor21

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

Re, hoerwind

Si -et seulement si- j'ai bien compris, tu souhaites :
1° -Regarder si chaque ligne à remplir existe en double-cliquant sur les cellules de couleur.
- Si elle existe, pas de pb, tu la remplis.
- Si elle n'existe pas, tu l'ajoutes en bas du tableau, et tu renseignes les colonnes nécessaires.​
2° -Recommencer en 1° jusqu'à ce que tous les postes utiles soient renseignés.

3° -Ne trier l'ensemble qu'en fin de saisie - au changement de feuille ? , à l'enregistrement ? , à la fermeture ? , à la réouverture ? -

4° -Interdire le tri manuel.​
 

hoerwind

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

re,

C'est bien cela.

Pas de tri en fin de saisie, tri à l'enregistrement (icône de la barre d'outils) et à la fermeture (c'est la même chose puisqu'à la fermeture il est demandé si les modifications doivent être enregistrées), pas au changement de feuille.
Si pas trop complexe, après le tri mise en page (lignes masquées) identique à celle avant le tri.

Interdire le tri manuel.

Merci.
 

Victor21

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

Re,

Test avec ce code :

VB:
Private Sub Worksheet_Activate()

    Dim derlig As Long
    derlig = Application.Match(Chr(254), [A:A])

    ' Protection de la feuille (actuellement sans mot de passe)
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
                      , UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowFiltering:=True

    With Range("A4:I" & derlig)
    ' Affichage de toutes les lignes
        .EntireRow.Hidden = False
    ' Tri de toutes les lignes sur la colonne A
        .Sort Key1:=Range("A4"), Order1:=xlAscending, Header:=xlGuess, _
              OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
              DataOption1:=xlSortNormal
    End With

    ' Positionnement du curseur sur le premier libellé
    Range("B4").Select

End Sub
Le tri ne se fait que lorsqu'après avoir quitté la feuille, on y revient.
 

Pièces jointes

  • Copie de TriBaseDeDonnees1.xls
    119 KB · Affichages: 161

hoerwind

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

Bonjour Victor,

Merci beaucoup, c'est très bien, mais il subsiste un petit problème.

Voici ce que j'ai fait :
- Ajouter une ligne en 'BdD Postes'!A130 et B130 ("ABCD" et "test")
- Fermer le fichier en le sauvegardant
- Ouvrir le fichier : le tri ne s'est pas effectué
- Activer 'BdD Articles'! (et ne rien faire)
- Activer 'BdD Postes'! : le tri s'est effectué et toutes les lignes sont affichées

J'ai refait le même test sans sauvegarder le fichier, le tri s'effectue.
Ce serait donc le changement de feuille qui actionnerait la macro et non la sauvegarde à la fermeture.

Je ne m'en explique pas la raison, et même si je la connaissais, je serais tout à fait incapable d'apporter la modification à la macro.
Peux-tu y jeter un coup d’œil ?
En même temps voir s'il est possible d'afficher la même mise en page (lignes masquées et affichées) que celle avant tri.

Je t'en remercie d'avance.

Édition :
Si j'avais bien lu ton message précédent !
Le tri ne se fait que lorsqu'après avoir quitté la feuille, on y revient.
N'y a-t-il vraiment pas moyen de le faire par l'icône "sauvegarde" de la barre d'outils ?
 
Dernière édition:

Victor21

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

Bonjour, hoerwind.

J'ai déplacé la procédure ci-dessus dans un module.
Elle est maintenant appelée :
-lors de la sauvegarde du classeur (quelle que soit la méthode employée, fichier-enregistrer ou clic sur l'icàone disquette).
-lors de l'activation de la feuille BdD Postes.
cela évite de l'écrire plusieurs fois.

On devrait pouvoir également boucler sur les 3 feuilles pour leur faire subir le même traitement, en ne changeant que la largeur de la zone à trier, et pour ce qui est de ne réafficher que les lignes qui l'étaient avant le tri, je pense que c'est possible avec un tableau, ou une colonne masquée qui enregistrerait la hauteur de chaque ligne, mais suis bien incapable de le mettre en place.

Je reviendrai si j'y arrive...
 

Pièces jointes

  • BaseDeDonneesMaconnerie.xls
    124.5 KB · Affichages: 288
  • BaseDeDonneesMaconnerie.xls
    124.5 KB · Affichages: 315
  • BaseDeDonneesMaconnerie.xls
    124.5 KB · Affichages: 333

hoerwind

XLDnaute Barbatruc
Re : Tri d'une plage avec lignes masquées (VBA)

Re,

Bien reçu et merci.
Pas le temps de tester maintenant, c'est l'heure de l'apéro et les amis viennent d'arriver, dommage que tu ne sois pas parmi eux !
Cela ne m'empêchera pas de boire un petit coup (avec modération) à ta santé.

A tantôt donc.
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 418
Membres
103 205
dernier inscrit
zch