Conflit

  • Initiateur de la discussion Edouard
  • Date de début
E

Edouard

Guest
Bonsoir le Forum

J’ai un Pp délicat à vous soumettre et pas facile à expliquer je vais donc le disséquer.

1 - la macro copier/coller de l’exemple ci-joint permet sans déprotéger la feuille de faire un copier/coller d’une plage quelconque (feuille ' Niveau 1 ' par exemple), sans copier les formules, uniquement les cellules qui ont des valeurs, vers la feuille identique d’un autre classeur.

Procédure : après avoir fait une copie du classeur ' Tableur ', pour être sur d’avoir deux classeurs identiques, considérer le classeur source ouvert sur la feuille ' Niveau 1 ' et le classeur cible aussi, dans le classeur source sélectionner une plage,(au moins une ligne entière pour que l’essai soit significatif) lancer la macro copier/coller, pointer le nom du classeur cible dans la boite de dialogue, qui vient de s’ouvrir, et dans le classeur cible pointer la cellule de base ou sera ancré la plage, (si la plage =A5 :AT6 du classeur source, pointer par ex en A7 ou A8 …du classeur cible) et enfin faire coller de la boite de dialogue.
Ok ça marche.

2 – Dans le Workbook un autre code oblige le classeur à s’ouvrir toujours sur la feuille ' Accueil '. Si une autre feuille après l’ouverture est activée, et enregistrée elle reste active, ce n’est pas la feuille ' Accueil ' qui redevient active.
Ok ça marche

Pb : ces deux macros fonctionnent très bien quand elles sont chacune dans des classeurs différents mais rentrent en conflit quand elles sont dans le même classeur.

Est-ce quelqu’un aurait une idée pour les faire cohabiter ?

Merci d’avance
A+
[file name=Tableur.zip size=33758]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Tableur.zip[/file]
 

Pièces jointes

  • Tableur.zip
    33 KB · Affichages: 17

Hellboy

XLDnaute Accro
Bonjour Edouard

Félicitation, tu as très bien décrit ta procédure et problème. Maintenant, j'aurais encore une ou deux questions pour toi.

1- Quels sont les macro que tu fait référence qui ne peuvent cohabiter ensemble ?

2- Et comment des macro qui se trouvent dans deux fichiers différent se retrouvent dans le meme ?

3- Mes questions précédantes sont moins importante que celle-ci: Est-ce que tu nomme la copie de ton nouveau classeur tableur sous le meme nom en meme temps que celui qui est ouvert ? Je ne sais pas si tu as déja essayer d'ouvrir par mégarde un fichier qui a le meme nom que celui qui est ouvert ? Tu ne peut pas.

Pense a ça donne nous en des nouvelles, Merci!
 
E

Edouard

Guest
Bonsoir Philipe et le Forum

La solution ne doit pas être simple et le Pb difficile à expliquer.
Merci d’avance pour y avoir répondu.

La macro qui est active, dans le classeur tableur est celle qui se trouve dans le module 3 et qui a aussi du code dans le workbook sous ‘copier coller partiel.
C’est elle qui réalise le copier coller partiel dont j’explique plus haut la procédure.

L’autre se trouve uniquement dans le workbook a partir de : 'Private Sub Workbook_Open() elle est rendue inactive par les ‘ en début de ligne ; c’est elle qui oblige le classeur à s’ouvrir sur la feuille 'Accueil '

Elles sont toutes les deux dans le même classeur car j’ai besoin de leur fonction dans le même classeur.
Ce qui me fait dire qu’elles sont en conflit c’est que pour être sur de leur fonctionnement je les ais testées dans des classeurs différents.
J’ai bien changé le nom du classeur copié.

Si tu veux te rendre compte de ce qui se passe, tu supprimes dans le workbook les ‘ à partir de la ligne 'Private Sub Workbook_Open() sauf pour les commentaires évidemment.

J’espère avoir été plus clair, si ce n’est pas le cas tu reviens
A+
 

Hellboy

XLDnaute Accro
Bonsoir Edouard

Je comprend tes explications, mais j'essaie de suivre tout les liens qui impliques les macros du workbook et celui du module 3. Il y a des choses qui cloche. Je vais te lister ce qui me tracasse. Peut etre a tord ou avec raison. Sans jugement de valeur. Objectivité complete. On fera donc un bilan après tes explications.

1- Je vois 2 procédures de workbook_open et pas avec les mêmes commandes a l'intérieur.
2- Je vois dans un cas l'hors de l'ouverture du fichier Tableur.xls que tu demande d'activer la feuille 'Acceuil'. Cette action va automatiquement entrainer la procédure 'Private Sub Workbook_SheetActivate(ByVal Sh As Object)' qui n'effectuera rien a cause de cette condition 'If Sh.Name = 'Accueil' Then Exit Sub'. Ca m'apparait drole . Peut etre que la demande d'activer la feuille 'Acceuil' aurait du etre mise l'hors de la fermeture du fichier.
3- Je ne vois aucune procédure ou bouton ou action qui appel 'Sub CopierColler'. Regarde de près ce que tu nous a fournis comme fichier. Je vois ceci en commentaire ''copier coller partiel', mais telquel, ça n'appellera jamais la procédure 'CopierColler'
4- Si on ôte la protection de la feuille 'Niveau 1', les boutons qui sont sur cette feuille pointe vers une macro qui s'appel 'TriNomNiv1'. Cette procédure ne se retrouve nulle part dans le fichier.

Bon pour le moment c'est tout.
 
E

Edouard

Guest
Salut Philipe

Exuse moi j'ai oublié de dire que obtenir les 50 k j'ai supprimé les macro de tri, plus le rouleau d'adhésif qui permet d'appeler la macro 'copier coller' pour réaliser un copier coller partiel.
Ci joint Tableur 1 qui supporte ces options par rapport au 50 k.

Dans un fil bis je te joint Tableur 2 qui lui réalise correctement l'ouverture sur la feuille 'Accueil'.

Je maitrise mal VBA, mais les deux fonctions marchent dans des classeurs différents me fait dire qu'il y a conflit entre les deux macro... !
Merci
A+


[file name=Tableur1.zip size=46634]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Tableur1.zip[/file]
 

Pièces jointes

  • Tableur1.zip
    45.5 KB · Affichages: 24

Hellboy

XLDnaute Accro
Bonjour Edouard

Je vais te cassé les oreilles, mais pas toutes mes questions ont été répondu. Je ne m'étendrai pas la dessus. pour être productif, je vais te donner mon adresse hot mail pour que tu puisse envoyer dans son INTÉGRALITÉ les 2 fichiers que tu parle. Ne met rien en commentaire dans ton code, je les veux telquel. Je vais pouvoir faire l'analyse de ton probleme dans son milieu.

Je suis conscien que cette pratique va a l'encontre de la charte, mais comme la derniere fois que je l'ai fais, je vais insérer sur ce fil, les résultat de mes recherches.

master_phil_007@hotmail.com

merci !
 

Hellboy

XLDnaute Accro
Bonjour Edouard

J'ai bien reçu ton fichier. J'ai regarder ça aujourd'hui. Pas sur d'avoir une réponse pour toi en ce Lundi. Mais demain j'espère.

Encore une ou deux petite chose.
'101Option Explicit
'102'activer la feuille 'accueil' à l'ouverture du classeur
'103'et faire en sorte que lorsque une autre feuille active est enregisrée
'104'la feuille 'accueil' ne soit pas systématiquement activée.

'105'Veriti Mai 2005
'106'http://veriti.free.fr/

'107Private Sub Workbook_Open()
'108'activer la feuille 'Accueil' à l'ouverture du classeur
'109Worksheets('Accueil').Activate
'110End Sub

'111Private Sub Workbook_beforesave(ByVal SaveAsUI As Boolean, cancel As Boolean)
'112'inscription de la date du jour à la sauvegarde
'113Feuil5.[a1] = Now
'114End Sub

'115Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'116'selon la feuille active si feuille active = Menu on sort
'117If Sh.Name = 'Accueil' Then Exit Sub
'118'sinon on inscrit le nom de feuille activée
'119Feuil5.[a2] = ActiveSheet.Name
'120End Sub

Cette partie ici, est-ce que normalement elle est en commentaires, ou elle a été mis en commentaires parce c'est elle qui te donne du trouble ?? Élabore s.v.p
En fait, est-ce que tu as enlever ou mis en commentaires une partie du code qui te causait le problème ?
La raison de cette question, est que j'ai suivis ta procédure(qui colle très bien avec ton nouveau fichier que tu m'a soumis) et je n'ai pas eu d'erreur ou de conflit.

J'oubliais, le fichier Philipppe.xls que tu m'as envoyé, lors tu te retrouve avec 2 fichiers identiques d'ouvert, Il sont vraiment identique dans les codes, module, la partie VBA ?

C'est tout ! ;)

Message édité par: Hellboy, à: 30/05/2005 18:42
 
E

Edouard

Guest
Salut philippe

C'est exactement ça ces lignes de 101 à 120 sont mises en commentaire parcequ'elles me posent Pb.
Je n'ais rien enlevé du tout, seules ces lignes sont neutralisées parcequ'elles posent Pb.

Rappel sur le fonctionnement que je voudrais.
A l'ouverture du classeur il s'ouvre obligatoremnt sur la feuille 'Accueil'.

Puis quand on a travaillé sur une autre feuille, et que l'on enregistre son travail, la feuille en question reste active.

Effectivement le 'copier coller partiel' fonctionne avec deux classeurs identiques a tout point de vue sauf dans leurs appellation.

(L'expression écrite n'est pas si simple)...

Merci pour ta pugnacité.
 

Hellboy

XLDnaute Accro
Bonjour Edwouard

En passant, je me suis amusé a compresser le code de cette procédure, il y avait un peu de redondance. Je continue a regarder ton code pour l'erreur.
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Centre$, Gauche$, Ws As Worksheet, Plage As Range
Dim Lignes&
Application.ScreenUpdating = False
With ThisWorkbook
      For Each Ws In .Worksheets
'définir les commentaires gauche et centre pour l'entête d'impression
            Gauche = .Worksheets('Date').Range('D3')
            Centre = ' Coupe formation Niv 1-2-3  ' & .Worksheets('Date').Range('D2')
                '=======================Concerne feuille Niveaux 1======================
            With Ws
            Select Case .Name
                   Case 'Date', 'Notice', 'Accueil', Is <> ''
                        Centre = ''
                        Gauche = ''
                        Select Case .Name
                                Case 'Date'
                                     Set Plage = .Range('A1:F106')
                                Case 'Notice'
                                     Set Plage = .Range('A1:M39')
                                Case 'Accueil'
                                     Set Plage = .Range('A1:M43')
                                Case Is <> ''
                                     Set Plage = .Range('A1:S41')
                        End Select
                   Case 'Niveau 1', 'Niveau 2', 'Niveau 3'
                        If .Range('A5') = '' Then
                            Select Case .Name
                                   Case 'Niveau 1'
                                        Set Plage = .Range('A5:AT5')
                                   Case 'Niveau 2'
                                        Set Plage = .Range('A5:AX5')
                                   Case 'Niveau 3'
                                        Set Plage = .Range('A5:BN5')
                            End Select
                       Else
                            Set Plage = .Range('A5:A65536')
                            Lignes = WorksheetFunction.CountIf(Plage, '>''') + WorksheetFunction.Count(Plage)
                            Select Case .Name
                                   Case 'Niveau 1'
                                        Set Plage = Plage.Resize(Lignes, 46)
                                   Case 'Niveau 2'
                                         Set Plage = Plage.Resize(Lignes, 50)
                                   Case 'Niveau 3'
                                         Set Plage = Plage.Resize(Lignes, 66)
                            End Select
                        
                       End If
               End Select
               .Unprotect
               .PageSetup.CenterHeader = Centre
               .PageSetup.LeftHeader = Gauche
               .PageSetup.PrintArea = Plage.Address
               .Protect
           End With
      Next Ws
End With
Application.ScreenUpdating = True
End Sub
 
E

Edouard

Guest
Bonjour Philipe et le Forum

Pour ne pas mélanger les Pb je laisse de coté pour l'instant ta modif.
merci quand meme .
Je l'intégrerai quand tous fontionnera.
Bonne réussite pour la suite.
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 609
Messages
2 090 193
Membres
104 448
dernier inscrit
lmp