VBA : Problème de décalage

ff145bv

XLDnaute Junior
Bonjour à tous,

J'espère que le fichier joint sera suffisamment explicite.

Cela fait un moment que je tourne autour de ce problème que je ne parviens pas à résoudre. :confused: :confused: :confused:

Des aides précédentes m'ont déjà permis de mieux cibler mes difficultés et - je l'espère - d'améliorer la structure de mon classeur et mes explications.

Mais là, j'avoue... je suis en rade.

Merci d'avance pour votre aide.
 

Pièces jointes

  • Classeur1.xls
    45 KB · Affichages: 89
  • Classeur1.xls
    45 KB · Affichages: 79
  • Classeur1.xls
    45 KB · Affichages: 84

job75

XLDnaute Barbatruc
Re : VBA : Problème de décalage

Bonjour,

Je pense qu'il faut interdire le tri par le menu Données-Trier.

Cela n'est possible que si chaque feuille est protégée par un mot de passe (c'est sans doute ce que vous envisagez, non ?).

Le tri sera cependant possible par un bouton Trier placé dans la 1ère feuille. Dans la macro associée on peut faire ce que l'on veut.

Je vous fais ça dès que j'ai 5 minutes.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : VBA : Problème de décalage

Re,

Ci-joint le fichier et la macro dans le code de la 1ère feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub CommandButton1_Click()
With Sheets(2)
ActiveSheet.Unprotect "toto"
.Unprotect "toto"
.Range("D2:D10").Value = Range("A2:A10").Value 'stockage données avant tri en Feuil2 colonne D
Range("A2:C10").Sort Key1:=Range("A2"), Order1:=xlAscending 'tri Feuil1
.Range("D2:F10").Sort Key1:=.Range("D2"), Order1:=xlAscending 'tri Feuil2
.Protect "toto"
ActiveSheet.Protect "toto"
End With
End Sub

Plusieurs remarques :

- les 2 feuilles sont protégées, mot de passe "toto" (modifiez-le dans les feuilles et dans la macro)

- les cellules des zones d'entrées sont déverrouillées

- les formules permettant de copier les données ont été complétées

- pour obtenir un tri correct, la macro stocke les noms de Feuil1 en colonne D (masquée) de Feuil2

- il sera souhaitable de protéger le classeur pour éviter le déplacement du 2ème onglet.

A+
 

Pièces jointes

  • Tri 2 feuilles.zip
    14.4 KB · Affichages: 30
Dernière édition:

ff145bv

XLDnaute Junior
Re : VBA : Problème de décalage

Bonsoir,

Effectivement, les deux feuilles sont protégées par des mots de passe (et les onglets cachés) de telle sorte que chaque opérateur de saisie n'intervienne que sur sa propre page.

Pour l'heure, il y a bien un bouton sur la première page pour effectuer le tri alphabétique de la Feuille 1. En revanche, ce tri n'a aucun impact sur la Feuille 2, ce qui explique le "décalage" observé.

Je n'ai jusqu'à présent trouvé aucun moyen de structurer mon code VBA afin qu'il assure un décalage identique des lignes sur les deux pages... mais je ne suis vraiment pas expert en programmation.

Merci d'avance pour votre aide.
 

Catrice

XLDnaute Barbatruc
Re : VBA : Problème de décalage

Bonsoir,

ci-joint une approche un peu differente.
Partant du principe que le classeur n'est pas partagé, que les utilisateurs peuvent voir toutes les données et qu'ils remplissent le tableau de façon asynchrone, les données sont dans une seule feuille et les zones de saisies ne sont accessibles qu'après saisie d'un mot de passe.
 

Pièces jointes

  • Classeur1.zip
    36.7 KB · Affichages: 48
  • Classeur1.zip
    36.7 KB · Affichages: 53
  • Classeur1.zip
    36.7 KB · Affichages: 51

ff145bv

XLDnaute Junior
Re : VBA : Problème de décalage

Re,

Apparemment, vous n'avez pas vu mon dernier message...

A+

Bonjour Job75,

En effet, nos messages se sont croisés.

Merci beaucoup pour votre coup de main. Je viens de faire le tour de votre code VBA : sobre et efficace ! Superbe !

De plus, ça marche parfaitement sur le fichier joint.

Juste une question complémentaire au sujet de la manipulation des deux feuilles. Mon classeur d'origine contient en fait 6 feuilles, même si le classement automatisé n'en concerne que 2.

Comment puis-je préciser quelle est la deuxième feuille directement à partir du code ?

Actuellement, l'instruction WITH Sheets (2) semble signifier "travailler avec les deux feuilles d'un classeur qui n'en compte que deux". Cela ne spécifie pas telle ou telle feuille. Est-ce possible ?

Encore merci.
 

ff145bv

XLDnaute Junior
Re : VBA : Problème de décalage

Bonsoir,

ci-joint une approche un peu differente.
Partant du principe que le classeur n'est pas partagé, que les utilisateurs peuvent voir toutes les données et qu'ils remplissent le tableau de façon asynchrone, les données sont dans une seule feuille et les zones de saisies ne sont accessibles qu'après saisie d'un mot de passe.

Bonjour Catrice,

Cette contre-proposition est intéressante dans l'absolu mais elle est contrariée par des contraintes supplémentaires sur les autres feuilles de mon classeur.

Je n'ai pas évoqué ces feuilles supplémentaires car elles ne rentrent pas dans mon problème de décalage mais elles sont aussi un peu... tortueuses.

Merci en tous cas pour votre aide.
 

ff145bv

XLDnaute Junior
Re : VBA : Problème de décalage


Bonjour kjin,

C'est un "faux doublon" en fait car j'ai complètement reformaté ma question à l'aide des remarques qui m'avaient été faites précédemment.

Dans la première version, il n'y avait plus aucune réaction car les messages et les précisions successives étaient vraiment devenus brouillons.

Voilà. Vous savez tout. ;)
 

job75

XLDnaute Barbatruc
Re : VBA : Problème de décalage

Bonjour à tous,

Actuellement, l'instruction WITH Sheets (2) semble signifier "travailler avec les deux feuilles d'un classeur qui n'en compte que deux". Cela ne spécifie pas telle ou telle feuille. Est-ce possible ?

With Sheets(2) signifie simplement qu'on travaille avec la 2ème feuille quand les instructions qui suivent commencent par un point. Le nombre total de feuilles n'intervient pas ici.

A+
 

ff145bv

XLDnaute Junior
Re : VBA : Problème de décalage

Bonjour à tous,



With Sheets(2) signifie simplement qu'on travaille avec la 2ème feuille quand les instructions qui suivent commencent par un point. Le nombre total de feuilles n'intervient pas ici.

A+

Dans mon classeur, la feuille de saisie des personnels est nommée BASE et la 5ème feuille du classeur tandis que la feuille de saisie des intervenants est nommée INSPECTIONS et est la 1ère feuille du classeur.

En reprenant votre code, ai-je raison de le modifier de la façon suivante ?
With Sheets(1)
ActiveSheet.Unprotect "babar"
.Unprotect "oscar"

Alors "babar" est le mdp de la Feuil5 (BASE), tandis que "oscar" est celui de la Feuil1 (INSPECTIONS).

Mon bouton étant sur la Feuil5 (BASE), ai-je raison de noter
With Sheets(1)
afin que l'autre feuille de travail soit bien ma Feuil1 (INSPECTIONS) ?
 

job75

XLDnaute Barbatruc
Re : VBA : Problème de décalage

Re,

En reprenant votre code, ai-je raison de le modifier de la façon suivante ?
With Sheets(1)
ActiveSheet.Unprotect "babar"
.Unprotect "oscar"

Alors "babar" est le mdp de la Feuil5 (BASE), tandis que "oscar" est celui de la Feuil1 (INSPECTIONS).

Oui, votre modif est parfaite. A noter que vous pouvez écrire Sheets(1) ou Sheets("INSPECTIONS").

Comme déjà signalé, il faudra protéger le classeur pour éviter que l'onglet 1 soit déplacé (ou renommé).

A+
 

ff145bv

XLDnaute Junior
Re : VBA : Problème de décalage

Juste une petite question complémentaire.

Dans l'expression :
Range("B5:BP504").Sort Key1:=Range("B5"), Order1:=xlAscending 'tri Feuil1
comment noter les autres clés de tri que l'on peut souhaiter insérer ?

Je crois que je m'emmêle avec les virgules...

Merci encore pour votre aide précieuse !
 

job75

XLDnaute Barbatruc
Re : VBA : Problème de décalage

Re,

Avec 2 clés de tri, on peut écrire par exemple :

Code:
Range("B5:BP504").Sort Key1:=Range("B5"), Order1:=xlAscending, Key2:=Range("C5"), Order2:=xlAscending 'tri Feuil1

3 clés de tri maximum.

A+

Edition : oui mais attention, l'autre feuille n'est triée que par une seule clé de tri ! Il faudrait introduire une colonne supplémentaire après la colonne D et y stocker les données pour la 2ème clé... A mon avis, sauf si vraiment c'est indispensable, contentez-vous d'une seule clé.
 
Dernière édition:

Discussions similaires