Message box

sarahbernard

XLDnaute Junior
Bonjour à tous,

Une fois encore je sollicite vos lumières.

J'ai écrit une macro dans un fichier "mensuel". Le but de cette macro est d'écrire les formules dans les cellules, puis copier-coller les valeurs. Ceci afin d'alléger le fichier lors de l'ouverture, l'enregistrement ou l'envoi.
J'ai donc des fichiers "hebdo" qui pointent vers mon fichier "mensuel".

Mon soucis c'est que à chaque fois que je déclenche la macro, ça fait bien le lien vers le fichier "hebdo1.xls" mais pour les autres, j'ai une message box : Les liens vers 'hebdo2.xls' n'ont pas été mis à jour, parce que 'hebdo2.xls' n'a pas été recalculé avant l'enregistrement.

Je vous met une partie de ma macro, sachant que c'est aussi le cas pour "hebdo3.xls", etc...

Code:
Sub Janvier()

'Ici on détermine des noms de raccourcis pour les chemins d'accès au fichiers
'Chemin correspond au chemin d'accès jusqu'au dossier 2012 de l'agence MANPOWER
'Fichier1 correspond au fichier Semaine1.xls,etc...
Dim Chemin As String, Fichier1 As String, Fichier2 As String, Fichier3 As String, Fichier4 As String, Fichier5 As String

'Maintenant on leur attribut une valeur
Chemin = "E:\Intérim heures\Relevé hebd MANPOWER\2012\"
Fichier1 = "Semaine 1.xls"
Fichier2 = "Semaine 2.xls"
Fichier3 = "Semaine 3.xls"
Fichier4 = "Semaine 4.xls"
Fichier5 = "Semaine 5.xls"


'Nous allons nous occuper de la semaine 1
'Nous allons travailler avec 2 plages de cellules différentes pour nos formules
'Nous allons donc leur donner un nom
'Nous allons combiner le chemin d'accès, le fichier excel et la plage de cellule
ThisWorkbook.Names.Add "plage1", _
RefersTo:="='" & Chemin & "[" & Fichier1 & "]Sheet1'!$A$4:$N$3000"

ThisWorkbook.Names.Add "plage1bis", _
RefersTo:="='" & Chemin & "[" & Fichier1 & "]Sheet1'!$A$4:$A$65536"


'Nous allons insérer de façon automatique une formule dans la colonne H des cellules 5 à 553
Worksheets("Janvier").[H5:H553].FormulaLocal = "=si(esterreur(concatener(index(plage1;EQUIV($E5;plage1bis;0)+6;7);index(plage1;EQUIV($E5;plage1bis;0)+6;8);index(plage1;EQUIV($E5;plage1bis;0)+6;9)));"""";concatener(index(plage1;EQUIV($E5;plage1bis;0)+6;7);index(plage1;EQUIV($E5;plage1bis;0)+6;8);index(plage1;EQUIV($E5;plage1bis;0)+6;9)))"

'Nous allons nous occuper de la colonne I
Worksheets("Janvier").[I5:I553].FormulaLocal = "=si(esterreur(si(index(plage1;EQUIV($E5;plage1bis;0)+6;12)=0;"" "";index(plage1;EQUIV($E5;plage1bis;0)+6;12)));"" "";si(index(plage1;EQUIV($E5;plage1bis;0)+6;12)=0;"" "";index(plage1;EQUIV($E5;plage1bis;0)+6;12)))"

'Maintenant la colonne des Jours fériés
Worksheets("Janvier").[J5:J553].FormulaLocal = "=si(esterreur(si(index(plage1;EQUIV($E5;plage1bis;0)+6;10)=0;"" "";index(plage1;EQUIV($E5;plage1bis;0)+6;10)));"" "";si(index(plage1;EQUIV($E5;plage1bis;0)+6;10)=0;"" "";index(plage1;EQUIV($E5;plage1bis;0)+6;10)))"

'Enregistre les modifications du fichier contenant la macro
ThisWorkbook.Save

'On passe à la semaine 2
ThisWorkbook.Names.Add "plage2", _
RefersTo:="='" & Chemin & "[" & Fichier2 & "]Sheet1'!$A$4:$N$3000"

ThisWorkbook.Names.Add "plage2bis", _
RefersTo:="='" & Chemin & "[" & Fichier2 & "]Sheet1'!$A$4:$A$65536"

Worksheets("Janvier").[L5:L553].FormulaLocal = "=si(esterreur(concatener(index(plage2;EQUIV($E5;plage2bis;0)+6;7);index(plage2;EQUIV($E5;plage2bis;0)+6;8);index(plage2;EQUIV($E5;plage2bis;0)+6;9)));"""";concatener(index(plage2;EQUIV($E5;plage2bis;0)+6;7);index(plage2;EQUIV($E5;plage2bis;0)+6;8);index(plage2;EQUIV($E5;plage2bis;0)+6;9)))"

Worksheets("Janvier").[M5:M553].FormulaLocal = "=si(esterreur(si(index(plage2;EQUIV($E5;plage2bis;0)+6;12)=0;"" "";index(plage2;EQUIV($E5;plage2bis;0)+6;12)));"" "";si(index(plage2;EQUIV($E5;plage2bis;0)+6;12)=0;"" "";index(plage2;EQUIV($E5;plage2bis;0)+6;12)))"

Worksheets("Janvier").[N5:N553].FormulaLocal = "=si(esterreur(si(index(plage2;EQUIV($E5;plage2bis;0)+6;10)=0;"" "";index(plage2;EQUIV($E5;plage2bis;0)+6;10)));"" "";si(index(plage2;EQUIV($E5;plage2bis;0)+6;10)=0;"" "";index(plage2;EQUIV($E5;plage2bis;0)+6;10)))"

'Enregistre les modifications du fichier contenant la macro
ThisWorkbook.Save

En vous remerciant pour vos lumières


Sarah
 
D

Denis

Guest
Re : Message box

Bonjour le fil et le forum,
C'est le 3ème fil que tu fais sur le sujet.
Dans le premier tu te plains du temps de traitement!!
Ce sera quasiment la même chose avec ta solution.
Il vaut mieux faire effectuer le calcul par VBA et le retranscrire que de coller un max de formules.
Je t'avais laissé la marche à suivre dans le premier fil, il suffit de l'adapter. Ensuite on peux t'aider sur la finalisation si tu rencontre des problèmes.
Bon courage et à+
Denis
 

sarahbernard

XLDnaute Junior
Re : Message box

Bonsoir,

Effectivement tu as raison Denis.

La chose qui me gène c'est que j'ai rien compris à ta macro, donc difficile pour moi de l'adapter et encore plus de la faire évoluer au fil du temps !
Par contre, tu as raison, je dois garder mon idée de base et ta solution, c'est à dire d'effectuer les calculs dans la macro.
J'ai donc essayer de m'y coller et je rencontre des soucis.
Voici le code :
Code:
Private Sub Essai()

'Ici on détermine des noms de raccourcis pour les chemins d'accès au fichiers
'Chemin correspond au chemin d'accès jusqu'au dossier 2012 de l'agence MANPOWER
'Fichier1 correspond au fichier Semaine1.xls,etc...
Dim Chemin As String, Fichier1 As String
Dim MaFormule As String
Dim Bizarre As Range, Reference As Range

With Workbooks("Manpower 2012test.xls").Sheets("Janvier")

'Maintenant on leur attribut une valeur
Chemin = "E:\Intérim heures\Forum XLD\Relevé mensuel\Manpower\"
Fichier1 = "Semaine 1.xls"


'Nous allons nous occuper de la semaine 1
'Nous allons travailler avec 2 plages de cellules différentes pour nos formules
'Nous allons donc leur donner un nom
'Nous allons combiner le chemin d'accès, le fichier excel et la plage de cellule
ThisWorkbook.Names.Add "plage1", _
RefersTo:="='" & Chemin & "[" & Fichier1 & "]Sheet1'!$A$4:$N$3000"

ThisWorkbook.Names.Add "plage1bis", _
RefersTo:="='" & Chemin & "[" & Fichier1 & "]Sheet1'!$A$4:$A$65536"

Set Reference = Worksheets("Janvier").Range("E5", [E65000].End(xlUp).Offset(-1, 0))

Set Bizarre = Worksheets("Janvier").Range("H5", [H65000].End(xlUp).Offset(-1, 0))

Bizarre.FormulaLocal = "=INDEX(plage1;EQUIV(E5;plage1bis;0)+6;12)"
    

Bizarre.Value = Evaluate(Bizarre.Formula)


End With


End Sub

Ce que j'aimerais obtenir c'est:
- que la formule recherche la valeur des cellules E5 à Ex dans le fichier Semaine 1 et que dans la colonne H elle me colle les valeurs qui se trouvent 12 colonnes à droite et 6 lignes en dessous.

J'ai joint les fichiers pour que vous puissiez vous rendre compte des problèmes que je rencontre.

Encore merci à vous tous


Sarah
 
D

Denis

Guest
Re : Message box

Re bonjour Sarah,
Désolé pour mon coup de gueule hier, mais il est pénible d'aller rechercher les info précédente dans des fils situés on ne sait où.
Ci-joint ton fichier avec une macro qui te met les données à jour.
C'est peut être impressionnant, mais il y a plus d'explications que de lignes de code.
Celle-ci fonctionne très bien pour semaine1. Essaies d'en comprendre le fonctionnement, ensuite je pourrais t'aider (ou un autre Xcélien) pour y insérer les autres semaines.
Bon courage et à+
Denis
 

Pièces jointes

  • Manpower 2012test.xls
    62 KB · Affichages: 63

sarahbernard

XLDnaute Junior
Re : Message box

Bonjour Denis,

Ne t'excuses pas, c'est moi qui suis en tort...
Je viens de regarder vite fait les macros ainsi que les explications et je commence à comprendre.
Même si à l'heure actuelle je suis incapable d'écrire une boucle dans une macro !

J'ai un petit soucis losque j'execute la macro extractiondedonnées. J'ai une erreur 430 La classe ne gère pas Automation ou l'interface attendue.
Et dans la macro c'est With xlSheet qui est surligné.
Aurais tu la gentillesse de m'expliquer ce que j'ai fais de travers ?
Je précise que j'ai rien touché dans la macro

Merci encore pour tout ( même pour ta franchise :))

Sarah
 
D

Denis

Guest
Re : Message box

re,
apparemment, problème de compatibilité entre la version 2000 d'excel et la 2007.
Regarde dans VB editor, clique outils, référence et décoche la réf notée "Manquant" s'il y en a une!
à+
Denis
 

sarahbernard

XLDnaute Junior
Re : Message box

Coucou,

Je viens de rentrer du boulot et je me suis replongée sur ta macro.

En fait, je n'avais pas compris qu'il fallait enregistrer le fichier semaine pour que les modifs apparaissent dans le mensuel. Je croyais que ça prenait en compte les changements de façon instantanée comme une formule. Je suis vraiment blonde ! ;)

J'ai regardé aussi comme je pouvais l'alimenter avec les semaines suivantes.
Est-ce que tu pourrais me confirmer qu'il faut un xlSheet par semaine (xlSheet1, xlSheet2,...) car je ne sais pas faire les boucles. Et incorporer le tout dans Sub ExtractionDesDonnées.

Enfin j'aimerais savoir s'il est possible au moment où tu définies la variable LeNom, de lui passer un paramètre pour qu'il prenne la valeur la plus proche et non pas exacte. Ceci permettrait de contourner les soucis de frappes

Encore merci de t'intéresser à mon problème

A bientot sur le forum

Sarah
 
D

Denis

Guest
Re : Message box

Bonjour Sarah et le forum,
Ravi que tu ais réussi à mettre ceci en route.
Pour les semaines, j'ai pris en compte ton exemple soit : Classeur qui se nomme "Semaine 1" et feuille janvier "Sheet1". Pourrais tu me donner les nom du classeur et des feuilles exacts que je puisse modifier en conséquence.
Pour ce qui est des Noms, prendre la valeur approchée n'est pas impossible, mais longue à réaliser. En plus tu vas confondre "Dupond Léon" et "Dupont Noël" Lol
Il est préférable de travailler en préventif et de n'avoir qu'une saisie de l'identité au début, ensuite utiliser cette première saisie pour remplir les autres bases de données.
à+
Denis
 

sarahbernard

XLDnaute Junior
Re : Message box

Bonjour,

Merci pour ta réponse. Je vais donc laisser comme consigne de faire très attention sur l'orthographe des noms.
Alors pour les noms des classeurs, c'est un peu compliqué, j'espère que je vais réussir à t'expliquer.
Pour les classeurs hebdomadaires.
Les heures sont extraites d'un logiciel de gestion du temps, donc 1 seul onglet par classeur et il s'appelle tout le temps Sheet1.
Par contre pour le nom du fichier, j'ai choisi d'imposer des noms et identifiables. Comme nous travaillons beaucoup avec les numéros de semaines, ça sera donc Semaine 1 (qui correspond du 02/01/12 au 08/01/12), ect...
Mais (parce qu'il y a toujours un MAIS !), si une semaine est à cheval entre 2 mois ( exemple la semaine 31 du 30/07au 05/08), alors il y aura une extraction pour les 30-31/07 et une autre pour la reste de la semaine, soit "Semaine 31" et "Semaine 31 bis".

Pour le classeur mensuel, pas de difficulté particulière, il y aura 1 onglet par mois.
Ce que je voudrais, c'est avoir une macro par mois, car inutile de déclencher la macro de Janvier au mois d'Août surtout si on a pas fait de modification. Et surtout, je ne voudrais pas faire planter le système en déclenchant une macro pour les semaines de Décembre alors que celles ci ne sont pas encore crées.

Voilà, j'espère que j'ai répondu à toutes tes questions, si c'est pas le cas dis le moi.
Si tu pouvais juste m'aider en me montrant comment rajouter 1 semaine (exemple Semaine 2) ça serait formidable, après ça sera à moi de bosser et de faire le reste, faut pas pousser non plus ;)

Encore merci pour tout.
A plaisir de te lire ( peut-être ce soir qui sait !)

Sarah
 

sarahbernard

XLDnaute Junior
Re : Message box

Re coucou,

C'est encore moi ! Je viens de rentrer du boulot, et me suis remise sur ta macro.
Je ne sais pas encore par quel bout la prendre une incorporer une semaine 2 sans alourdir inutilement ton travail.
Mais je fais des recherches pour voir si je ne tombe pas sur un cas qui ressemblerait au mien.
En parcourant mon copain "google", il y a une procédure qui revient souvent, c'est l'utilisation des tableaux.
Est-ce un début de solution ?

Mais comment l'adapter à mon cas ?

Cordialement

Sarah
 

Statistiques des forums

Discussions
312 388
Messages
2 087 864
Membres
103 672
dernier inscrit
ammarhouichi