Macro : impression de toutes les pages

Bonjour,

Je travaille sur un fichier avec des interconnections :

49gir-finfin-g3.xlsm (107.08 Ko)

Les 3 onglets à prendre en compte sont :

  • LISTE DES RESIDENTS
  • IMPRESSION AGGIR RESIDENT
  • ALGORITHME

- dans LISTE DES RESIDENTS

Dans la plage I5:AD51 : plage de saisie, je saisi des A, B ou C

La macro "Trier et calculer le GIR surla feuille entière", doit coller les lignes entre I5:AD51 dans l'onglet IMPRESSION AGGIR RESIDENT ligne 62

- dans IMPRESSION AGGIR RESIDENT

Lorsque les lignes se collent dans la ligne 62, cela change les valeurs dans les colonnes G et H (globalement entre G8 et H42) (valeurs A, B, C, reliées à la ligne 62).

LA cellule D47 de IMPRESSION AGIR RESIDENT est reliée à l'onglet ALGORITHME, lui même relié aux valeurs A, B et C entre G8:H42.

Selon les valeurs A, B ou C entre G8:H42, l'ALGORITHME calcule un score.

- dans ALGORITHME

Selon les valeurs A, B ou C entre G8:H42 de IMPRESSION AGGIR RESIDENT, l'ALGORITHME calcule un score en C26 (score appellé GIR, nbre entier entre 1 et 6).

Une fois calculé ce score se copie en D47 de l'onglet IMPRESSION AGGIR RESIDENT.

Donc si je récapitule les interactions on a :

Saisie dans LISTE DES RESIDENTS, copie des données dans IMPRESSION AGGIR RESIDENT, calcul du score (gir) dans ALGORITHME, copie du score obtenu dans IMPRESSION AGGIR résident, puis copie du score dans la ligne correspondante dans LISTE DES RESIDENTS !!!

Vous êtes perdus ? c'est normal...

Actuellement avec les macros présentes dans LISTE DES RESIDENTS, il subsiste de petits pbm :

  • lorsque je clique sur TRIER ET CALCULER LE GIR SUR LA FEUILLE ENTIERE, cela me donne un même score unique en AE, alors que les scores devraient être différents
  • lorsque je clique sur IMPRIMER TOUTES LES GRILLES AGGIR, cela m'imprime une seule grille unique (même noms, même scores)
  • lorsque je clique sur VOIR GRILLE AGGIR du résident sélectionné, idem, j'ai une seule grille unique et pas celle du résident sélectionné

Merci d'avance pour toute aide et merci à Galopin01 qui a déja bien nettoyé le fichier et les scripts

Vincent

Bonjour,

J'ai RV à l'hosto dans quelques minutes donc je ne pourrais pas développer longuement.

J'ai bien pris le fichier joint et je l'ai ouvert sans le télécharger.

Désolé mais je n'observe pas du tout cela.

Si je rajoute un résident supplémentaire "GALOPIN" et je lui met successivement A,B,C,A,B,C,... (Ligne 60 rang 56) et que je clique sur Voir Grille, j'ai bien la fiche de GALOPIN et le GIR affiché est 2.

Le seul inconvénient est que ce 2 n'est pas rajouté sur la liste, mais je n'ai pas le temps de traiter ce problème maintenant : on verra ça à mon retour vers 5 h

Quand à l'impression, j'ai bien l'aperçu avant impression de toutes les fiches...

A+

Re,

J'ai fini par comprendre le pbm ! Le fichier était chez moi en mode calcul manuel, pourquoi ?? Ce qui par voie de conséquence faussait tout !

En remettant en automatique, j'ai l'impression que tout marche.

Effectivement si je change les A,B,C sur une personne ds la liste et que je fais "Voir Grille" (sans faire Trier et Calculer au préalable), le score ne se met pas automatiquement ds la liste.

sinon tout le reste marche !

Merci encore !

Problème résolu ?

Ou veux-tu une mise à jour du GIR à chaque fois que tu changes un critère sur une ligne quelconque ?

A+

Ok pour une mise à jour chaque fois que je change un critère, mais donc du coup on peut supprimer la partie "CALCUL" de la macro de TRI ET CALCUL ? Puisque le calcul se sera fait automatiquement déja ? Ou on peut aussi la laisser ça ne changera rien.

A te relire

Coller cette macro dans le module de la Feuille "LISTE DES RESIDENTS"

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iR%, iC%
If Target.Count = 1 Then
iC = Target.Column
  If iC > 8 And iC < 31 Then
    iR = Target.Row
      Range(Cells(iR, 1), Cells(iR, 30)).Copy Sheets("impression aggir resident").Range("A62")
      Sheets("impression aggir resident").Range("D47").Copy
      Application.EnableEvents = False
      Sheets("Liste des residents").Cells(iR, 31).PasteSpecial Paste:=xlPasteValues
      Application.EnableEvents = True
      Cells(iR, iC).Activate
  End If
End If
End Sub

Et modifier la macro de tri comme suit :

Sub MacroG()
Dim i%
Application.ScreenUpdating = False
'Trie des résidents
Application.EnableEvents = False
Range("B5:AE101").Sort Key1:=Range("C4"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
Application.EnableEvents = True
Range("A5:A101").ClearContents
For k = 5 To 101
    With Worksheets("Liste des residents").Cells(k, 3)
      If .Value <> "" Then Cells(k, 1).Value = k - 4
    End With
Next
k = Application.Max(Columns(1))
Range("A" & k + 5).Select
End Sub

A+

Bonsoir,

J'ai fait des tests :

- VOIR GRILLE > ok le GIR calculé est le bon, et la grille s'affiche

- Si je change les A,B,C dans la iste le score se calcule bien automatiquement

- TRIER ET CALCULER > Le score ne change pas si je change les A, B, C. dans la liste en copiant/collant par exemple la saisie de la ligne en dessus. Ou si je tire un "A"... Ca peut être source d'erreur lors de l'utilisation. Et ça va être trés laborieux lors de la saisie.

- Pas de mise à jour directe du score si je change des A, B , C ds la liste en copiant/collant à partir d'une autre ligne. Et si je fais TRIER ET CALCULER par la suite ça ne change toujours pas.

Pour vérifier ou tester les scores > si je mets que des AAAAA je dois obtenir 6, > si je met que des CCCCC je dois obtenir 1, un mélange ABC donne des scores entre 1 et 6.

A te relire,

Vincent

Bonjour,

Effectivement j'ai mis une limitation qui ne recalcule que pour le changement d'1 cellule. Tu peux faire un Copier/Coller de plusieurs ceellules mais tu dois au moins modifier (ou confirmer) une des cellules manuellement pour engager le recalcul.

A+

Ok, je comprends.

J'imagine qu'il vaut mieux laisser comme cela ?

Et merci bien pour ce travail ! ça va beaucoup m'aider.

Vincent


une dernière question :

- est-il possible que lorsque je clique sur TRI ET CALCUL, le recalcul se fasse ? Car j'ai peur des erreurs (si on copie colle et on ne modifie pas une cellule manuellement, le score pourra rester advitam aeternam faussé sans que je m'en rende compte)

Et comme je ne serai pas seul à utiliser ce fichier...

a+

Ok dans ce cas reprend cette macro :
Sub MacroG()
Dim i%
Application.ScreenUpdating = False

'Trie des résidents
Range("B5:AE101").Sort Key1:=Range("C4"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
Range("A5:A101").ClearContents
For rwIndex = 5 To 101
    With Worksheets("Liste des residents").Cells(rwIndex, 3)
      If .Value <> "" Then Cells(rwIndex, 1).Value = rwIndex - 4
    End With
Next rwIndex
'Copier coller des données dans une boucle limitée
nbPatient = Application.Max(Columns(1))
Application.EnableEvents = False
For i = 1 To nbPatient
    Range(Cells(i + 4, 1), Cells(i + 4, 30)).Copy Sheets("impression aggir resident").Range("A62")
    Sheets("impression aggir resident").Range("D47").Copy
    Sheets("Liste des residents").Cells(i + 4, 31).PasteSpecial Paste:=xlPasteValues
Next i
Application.EnableEvents = True
Range("A" & nbPatient + 5).Select
End Sub

Très Important : Attention cette macro est un poil modifié pour être coordonnée avec la mise à jour directe sur liste.

Toute modification intempestive de l'une ou l'autre de ces deux dernières macros (Worksheet_Change et MacroG) peut entrainer un blocage d'Excel nécessitant de fermer Excel par le Gestionnaire de tache ou d'éteindre l'ordinateur, sans sauvegarde possible d'Excel.

Ces macros ne devraient donc être modifiées que par un programmeur chevronné.

A+

Je viens d'essayer : ça marche parfaitement !

Je ne risque pas de toucher aux macros, d'ailleurs je vais tout protéger de ce pas !

J'y pense : comme je vais protéger les feuilles (seule la zone de saisie dans la liste sera modifiable),

Je peux ajouter :

ActiveSheet.Unprotect ("motdepasse")

et à la fin :

ActiveSheet.Protect ("motdepasse"

Pour chaque macro, sans problème ?

Non inutile. Je préfère cette méthode :

Mettre cette macro dans le module ThisWorkbook :

Private Sub Workbook_Open()
For i = 1 To Worksheets.Count
Worksheets(i).Protect Password:="TonMotDePasse", UserInterfaceOnly:=True
Next
End Sub

En remplaçant "TonMotDePasse" par le mot de passe qui te convient entre guillemets. (Toutes les feuilles auront le même mot de passe)

Voir également message en MP.

A+

Je ne connaissais pas cette méthode : c'est beaucoup plus simple ! et m'évitera de toucher aux macros...

Merci encore !

Vincent

Re,

Pour la protection, bien qu'ayant copié le script, les cellules verrouillées ne sont pas protégées, dois je faire une manie spéciale ?


si je protège les feuilles il y a un bug à ce niveau lorsque j'utilise la macro "TRI ET CALCUL" :

[color=#FFFF00]'Trie des résidents
Range("B5:AE101").Sort Key1:=Range("C4"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal[/color]

a+

Bonjour,

Le script est exécuté à chaque ouverture du classeur (ou si tu exécutes le script toi-même au moment de l'installation du script).

Tu ne peux pas protéger toi-même manuellement en dehors du script puisque ça raison d'être est de protéger la feuille en permanence mais de permettre aux macros de s'exécuter librement. Une protection "ordinaire" s'applique également contre les macros.

En d'autres termes si à un moment tu déprotèges manuellement, tu dois reprotéger via le script.

Sinon, en dehors de ça je ne vois pas. De mon coté :

Je n'ai aucun problème!!!!!!!!

?

J'imagine que seule lacolonne GIR à vocation à être protégée ?

Tu peux développer un peu ?

A+

Bonjour,

En fait je souhaite protéger toutes les cellules du documents, sauf certaines que je déverouillerai. (comme la plage de saisie dans LISTE, et quelques cellules dans les autres onglets).

Est ce possible avec ce script ?

Bien sur !

Par défaut toutes les cellules sont verrouillées (sauf les plages dont tu as décoché le verrouillage).

Mais la protection n'est effective que si les feuilles sont protégées.

C'est l'objet de la macro Workbook_Open. La protection est donc effective à chaque ouverture de classeur. (ou si tu exécutes manuellement cette macro).

Ok ?

Alors j'ai protégé toutes les feuilles, avec le même mot de passe que j'ai mis dans la macro.

Toujours un pbm de débogage sur LISTE RESIDENT


Arrrg !!

C'est bon ! Le mdp des deux derniers onglets n'était pas le même... c'est ce qui bloquait tout...

Ca marche !!

Merci pour ta patience

Ca marche pour le tri, mais bug pour "VOIR GRILLE"

je refait des tests


Maintenant il y a un pbm de déboguage ici pour VOIR GRILLE :

Range("A" & LigneX & ":AE" & LigneX).Copy Destination:=Sheets("IMPRESSION AGGIR RESIDENT").Range("A62")

je vais y arriver!


END : en déverouillant la range 62 : tout fonctionne enfin !

et merci pour les shadocks

Rechercher des sujets similaires à "macro impression toutes pages"