Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bizareries Excel ????? Module et feuille!!!!!!

2 réponses
Avatar
tip.tiptop
Bonsoir
Ce soir et pour changer ma demande tient dans une phrase plutôt étrange sur
un Forum d'aide.
J'aimerai bien avoir une explication du pourquoi ça marche .-)

Un des boutons action d'un classeur Excel exécute une macro qui n'a rien
d'exceptionnelle si ce n'est quelle fait appel à une BO Word "Bibliothèque
Object".
Le code de cette dernière qui fonctionne et reproduit en fin du message pour
info.

Une autre macro exécute des lignes de code qui crée sur une feuille nommé
répertoire un sommaire des feuilles du dit classeur avec lien hypertexte
pour accéder à ces dernières
Tout fonctionne correctement.

Alors poukoi ma question?

Ba nous y voila.
Mon répertoire des feuilles du classeur est crée avec toutes les feuilles du
classeur à l'exception de 3 (c'est volontaire)
j'ai exclu via le code la création dans mon répertoire de 3 feuilles. Mais
pour que tout fonctionne parfaitement j'ai du également exclure du code le
nom de la macro qui fait appel à une BO word.
Faute de quoi cette macro est considérée par mon code comme une feuille.
J'aimerai bien savoir pourquoi exclure cette macro et pas les autres?

L'exclusion est identifiée dans les lignes ci-dessous:

Je veux bien exclure du répertoire les feuilles: " Répertoire",
"Mod_Edition_Fiche", " Effectifs" mais pourquoi ajouté la feuille
"Mod_Edition_Fiche" qui en réalité est un module ?

For Each sh In Sheets
Nom = sh.Name

'*********************************************************
'Ne pas faire de traitement sur feuille :
'" Répertoire, 1-Modele & Mod_Edition_Fiche"
'
'Je sais pas pourquoi il faut auusi traiter non pas
'la feuille : Mod_Edition_Fiche mais il faut traiter
'le module : Mod_Edition_Fiche.
'Si traitement non effectué le module; Mod_Edition_Fiche
'Apparaît comme lien
'*********************************************************
If Nom <> " Répertoire" Then
If Nom <> "1-Modele" Then
If Nom <> "Mod_Edition_Fiche" Then
If Nom <> " Effectifs" Then

'*********************************************************
'Récuperer le prenom Col dans chaque feuille
'*********************************************************
mafeuil = Nom
Sheets(mafeuil).Select

Ci dessous est reproduit le code du module considéré par ma macro comme une
feuille du classeur:

' EditionFiche Macro
' Macro enregistrée le 23/07/98 par JFC
' Mise à jour le 08/03/2006/06 par JFR
'
'
Sub Edition_Fiche()
Dim AppWord As Word.Application
Dim maCellule As Range
Dim NomCentre As String
Dim NomRep As String
Dim NomRepSave As String
Dim Prénom As String
Dim PrénomCour As String
Dim Taux As String
Dim decal As Integer
Dim ajout As Integer
Dim valEntière As Integer
Dim Assistante As String

'*********************************************************
' Identification de l'assistante qui traite le dossier
'*********************************************************
Assistante = InputBox(Prompt:="Ce dossier est suivi par?")

Assistante = UCase(Assistante)

'*********************************************************
' Répertoire
' Mettre ici le chemin d'accés au fichier modèle Word
' En fonction de la variable Assistante
'*********************************************************

If Assistante = "HELENE" Then
NomRep = "C:\CE2I\Vacances\Vacances2006\Enfants2006\Idf\Edition\"
End If

If Assistante = "CORALIE" Then
NomRep = "G:\Vacances\Vacances2006\Enfants2006\Idf\Edition\"
End If

If Assistante = "MALIKA" Then
NomRep = "G:\Vacances\Vacances2006\Enfants2006\Idf\Edition\"
End If

If Assistante = "SALOUA" Then
NomRep = "G:\Vacances\Vacances2006\Enfants2006\Ouest\Edition\"
End If

If Assistante = "SYLVIE" Then
NomRep = "G:\Vacances\Vacances2006\Enfants2006\Est\Edition\"
End If

If Assistante = "PASCALE" Then
NomRep = "0:\Ce_local\Activités_Enfants_2006\Ouest\Edition\"
End If

'If Assistante <> "" Then
'If Assistante = "JF" Then
'NomRep = "D:\W_Home\W_Home\Sub_Enfants\Retour_CE2I\Est\Edition\"
' Else
'NomRep = "D:\W_Home\Sub_Enfants\Modèle-doc\"
'NomRep = "G:\Vacances\Vacances2006\Enfants2006\Idf\Edition\"
'End If
'End If

'*********************************************************
' Nom du Fihier modèle.doc
'*********************************************************
If Assistante <> "" Then

If Assistante = "HELENE" Then
FileNameIn = NomRep + "Modèle_Remb_2006_Helene.doc"
End If

If Assistante = "CORALIE" Then
FileNameIn = NomRep + "Modèle_Remb_2006_Coralie.doc"
End If

If Assistante = "MALIKA" Then
FileNameIn = NomRep + "Modèle_Remb_2006_Malika.doc"
End If

If Assistante = "SYLVIE" Then
FileNameIn = NomRep + "Modèle_Remb_2006_Sylvie.doc"
End If

If Assistante = "SALOUA" Then
FileNameIn = NomRep + "Modèle_Remb_2006_Saloua.doc"
End If

If Assistante = "PASCALE" Then
FileNameIn = NomRep + "Modèle_Remb_2006_Pascale.doc"
End If

'If Assistante <> "" Then
'FileNameIn = NomRep + "Modèle_Remb_2006_XAssistante.doc"
'End If
End If
'*********************************************************
' Lancement WORD
'*********************************************************
Set AppWord = CreateObject("Word.Application")
Set DocWord = CreateObject("Word.Document")

'*********************************************************
' Récupération du Nom du centre
'*********************************************************
Set maCellule = ActiveSheet.Range("k2")
NomCentre = maCellule.Value

'*********************************************************
' Récupération du Nom complet
'*********************************************************
Set maCellule = ActiveSheet.Range("c2")
NomComplet = maCellule.Value

'*********************************************************
' Extraction du nom du collaborateur (hors prénom)
'*********************************************************
POS = InStr(NomComplet, " ")
If POS > 0 Then
Nom = Left(NomComplet, POS - 1)
Else
Nom = NomComplet
End If

'*********************************************************
' Récupération du Taux de particpation
'*********************************************************
Set maCellule = ActiveSheet.Range("i2")
Taux = CStr(maCellule.Value * 100)

'*********************************************************
' première cellule (A8)
'*********************************************************
decal = 6

'*********************************************************
' Boucle sur les infos relative à chaque remboursement
'*********************************************************
PrénomCour = ""
ajout = 0

'*********************************************************
'I et J Max = 6 pour 6 enfants par feuille
'*********************************************************
For i = 1 To 6
For j = 1 To 6

'*********************************************************
' Récupération prénom complet
'*********************************************************
PrénomComplet = Trim(ActiveSheet.Cells(j + decal, 2))

'*********************************************************
'Recherche position du premier espace""
'*********************************************************
POS = InStr(PrénomComplet, " ")
If POS > 0 Then
Prénom = Left(PrénomComplet, POS - 1)
Else
Prénom = PrénomComplet
End If

'*********************************************************
' Mise à jour prénom courant et indicateur ajout (pour le cas
' ou il y aurait plus de 8 remboursements pour un enfant!)
'*********************************************************
If j = 1 And Prénom <> "" Then
If Prénom = PrénomCour Then
ajout = ajout + 8
Else
PrénomCour = Prénom
ajout = 0
End If
End If

'*********************************************************
' Remplissage du fichier seulement si:
'
' - édition vide et
' - type séjour non vide et
' - dates début et fin précisées
' - montant non nul
'*********************************************************
If ActiveSheet.Cells(j + decal, 15) = "" And _
ActiveSheet.Cells(j + decal, 4) <> "" And _
ActiveSheet.Cells(j + decal, 5) <> "" And _
ActiveSheet.Cells(j + decal, 6) <> "" And _
ActiveSheet.Cells(j + decal, 8) <> 0 Then

'*********************************************************
' Ouverture fichier modèle
'*********************************************************
AppWord.Documents.Open FileNameIn


'AppWord.Visible = True

'*********************************************************
' Insertion du nom du centre
'*********************************************************
AppWord.ActiveDocument.Content.Find.Execute "XASSISTANTE", ,
, , , , , , , Assistante

'*********************************************************
' Insertion du nom du centre
'*********************************************************
AppWord.ActiveDocument.Content.Find.Execute "XCENTRE", , , ,
, , , , , NomCentre

'*********************************************************
' Insertion du nom complet
'*********************************************************
AppWord.ActiveDocument.Content.Find.Execute "XNOM", , , , ,
, , , , NomComplet

'*********************************************************
' Insertion du prénom complet
'*********************************************************
AppWord.ActiveDocument.Content.Find.Execute "XPRENOM", , , ,
, , , , , PrénomComplet

'*********************************************************
' Insertion du taux de remboursement
'*********************************************************
AppWord.ActiveDocument.Content.Find.Execute "XTAUX", , , , ,
, , , , Taux

'*********************************************************
' Insertion de l'indication de plafonnement
'*********************************************************
valeur = ActiveSheet.Cells(j + decal, 11)
AppWord.ActiveDocument.Content.Find.Execute "XPLAFOND", , ,
, , , , , , valeur

'*********************************************************
' Insertion date début séjour
'*********************************************************
valeur = ActiveSheet.Cells(j + decal, 5)
AppWord.ActiveDocument.Content.Find.Execute "XDATEDEB", , ,
, , , , , , valeur

'*********************************************************
' Insertion date fin séjour
'*********************************************************
valeur = ActiveSheet.Cells(j + decal, 6)
AppWord.ActiveDocument.Content.Find.Execute "XDATEFIN", , ,
, , , , , , valeur

'*********************************************************
' Insertion type de séjour
'*********************************************************
valeur = ActiveSheet.Cells(j + decal, 16)
AppWord.ActiveDocument.Content.Find.Execute "XTYPE", , , , ,
, , , , valeur

'*********************************************************
' Insertion nom organisme
'*********************************************************
valeur = ActiveSheet.Cells(j + decal, 7)
AppWord.ActiveDocument.Content.Find.Execute "XORGANISME", ,
, , , , , , , valeur

'*********************************************************
' Insertion montant
'*********************************************************
montant = ActiveSheet.Cells(j + decal, 8)
valEntière = Int(montant + 0.5)
AppWord.ActiveDocument.Content.Find.Execute "XMONTANT", , ,
, , , , , , CStr(valEntière)

'*********************************************************
' Insertion participation CE
'*********************************************************
montant = ActiveSheet.Cells(j + decal, 9)
valEntière = Int(montant + 0.5)
AppWord.ActiveDocument.Content.Find.Execute
"XPARTICIPATION", , , , , , , , , CStr(valEntière)

'*********************************************************
' Insertion droits restants
'*********************************************************
montant = ActiveSheet.Cells(j + decal, 10)
valEntière = Int(montant + 0.5)
AppWord.ActiveDocument.Content.Find.Execute "XDROIT", , , ,
, , , , , CStr(valEntière)

'*********************************************************
' Insertion numéro de chèque
'*********************************************************
numéro = ActiveSheet.Cells(j + decal, 12)
AppWord.ActiveDocument.Content.Find.Execute "XNUMCHEQUE", ,
, , , , , , , CStr(numéro)

'*********************************************************
' Insertion date
'*********************************************************
valeur = ActiveSheet.Cells(j + decal, 13)
AppWord.ActiveDocument.Content.Find.Execute "XDATECHEQUE", ,
, , , , , , , valeur

'*********************************************************
' Insertion code comptabilité
'*********************************************************
numéro = ActiveSheet.Cells(j + decal, 14)
AppWord.ActiveDocument.Content.Find.Execute "XCODE", , , , ,
, , , , CStr(numéro)

'*********************************************************
' Déterminer le nom du fichier WORD de sauvegarde
'*********************************************************
nomFichier = Nom + "-" + Prénom + "-" + CStr(j + ajout)

'*********************************************************
' Sauvegarde dans un fichier: nom+prénom+indice.doc
'*********************************************************
NomRepSave = NomRep + "Editions_Col\"
AppWord.ActiveDocument.SaveAs NomRepSave + nomFichier +
".doc"



'*********************************************************
' Impression du fichier
'*********************************************************
'DocWord.FichierImprimer

'*********************************************************
' Fermeture fichier
'*********************************************************
AppWord.ActiveDocument.Close
End If
Next j

'*********************************************************
' décalage pour l'enfant suivant
'*********************************************************
decal = decal + 9
Next i

AppWord.Quit

End Sub

Le message et long mais j'ai essayé dans la mesure du possible d'être clair.

Par avance merci

2 réponses

Avatar
MichDenis
Si j'ai bien compris, tu as une feuille de calcul dont le nom
de l'onglet est : Mod_Edition_Fiche et tu as aussi un
module dans la fenêtre de l'éditeur de code qui porte le
même nom que l'onglet de la feuille.

Ton code débute par ceci :

For Each sh In Sheets
Nom = sh.Name

La variable "Nom" va prendre inévitablement à un moment
dans la boucle la valeur "Mod_Edition_Fiche"
qui représente un des onglets de ta feuille... cela n'a rien à
voir avec le module du nom qui porte un nom identique.

Il se peut que je n'ai rien compris de ta question .. ;-))


Extrait de ton code...
=============================== Je veux bien exclure du répertoire les feuilles: " Répertoire",
"Mod_Edition_Fiche", " Effectifs" mais pourquoi ajouté la feuille
"Mod_Edition_Fiche" qui en réalité est un module ?

For Each sh In Sheets
Nom = sh.Name

'*********************************************************
'Ne pas faire de traitement sur feuille :
'" Répertoire, 1-Modele & Mod_Edition_Fiche"
'
'Je sais pas pourquoi il faut auusi traiter non pas
'la feuille : Mod_Edition_Fiche mais il faut traiter
'le module : Mod_Edition_Fiche.
'Si traitement non effectué le module; Mod_Edition_Fiche
'Apparaît comme lien
'*********************************************************
If Nom <> " Répertoire" Then
If Nom <> "1-Modele" Then
If Nom <> "Mod_Edition_Fiche" Then
If Nom <> " Effectifs" Then

'*********************************************************
'Récuperer le prenom Col dans chaque feuille
'*********************************************************
mafeuil = Nom
Sheets(mafeuil).Select

================================
Avatar
Jean-François REY
Bonjour MichDenis

C'est sans doute mes explications qui ne sont pas claires

En réalité j'ai aucune une feuille dans mon classeur qui porte le nom:
Mod_Edition_Fiche.
Mod_Edition_Fiche est un module du classeur.

Alors porquoi est il considéré par ma macro comme une feuille?

"MichDenis" a écrit dans le message de news:

Si j'ai bien compris, tu as une feuille de calcul dont le nom
de l'onglet est : Mod_Edition_Fiche et tu as aussi un
module dans la fenêtre de l'éditeur de code qui porte le
même nom que l'onglet de la feuille.

Ton code débute par ceci :

For Each sh In Sheets
Nom = sh.Name

La variable "Nom" va prendre inévitablement à un moment
dans la boucle la valeur "Mod_Edition_Fiche"
qui représente un des onglets de ta feuille... cela n'a rien à
voir avec le module du nom qui porte un nom identique.

Il se peut que je n'ai rien compris de ta question .. ;-))


Extrait de ton code...
=============================== > Je veux bien exclure du répertoire les feuilles: " Répertoire",
"Mod_Edition_Fiche", " Effectifs" mais pourquoi ajouté la feuille
"Mod_Edition_Fiche" qui en réalité est un module ?

For Each sh In Sheets
Nom = sh.Name

'*********************************************************
'Ne pas faire de traitement sur feuille :
'" Répertoire, 1-Modele & Mod_Edition_Fiche"
'
'Je sais pas pourquoi il faut auusi traiter non pas
'la feuille : Mod_Edition_Fiche mais il faut traiter
'le module : Mod_Edition_Fiche.
'Si traitement non effectué le module; Mod_Edition_Fiche
'Apparaît comme lien
'*********************************************************
If Nom <> " Répertoire" Then
If Nom <> "1-Modele" Then
If Nom <> "Mod_Edition_Fiche" Then
If Nom <> " Effectifs" Then

'*********************************************************
'Récuperer le prenom Col dans chaque feuille
'*********************************************************
mafeuil = Nom
Sheets(mafeuil).Select

=============================== >