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

portabilité de code

11 réponses
Avatar
maxou07
bonjour,
j'ai un code vba développé avec w2000; j'aimerais savoir si celui-ci est
portable sur les versions w2003 et w2007.
pouvez-vous me renseigner ?
Merci d'avance.
Maxou 07

le code :

'*****************
'Déclaration des API à retranscrire sans erreur
'*****************
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias
"WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As Any, _
ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection& Lib "kernel32" Alias
"GetPrivateProfileSectionA" _
(ByVal lpAppName As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String)

Public Function ExisteSectionIni(Section As String, Fich As String) As
Boolean
Dim Retour As Long
Dim Valeur As String

Valeur = String(32767, 0) '32767 est la longueur maxi que peut avoir
une section
' Retour représente la longueur de la section, donc si elle est supérieure à
0, elle existe
Retour = GetPrivateProfileSection(Section, Valeur, 32766, Fich)
If Retour > 0 Then ExisteSectionIni = True
End Function

Public Function LireCleIni(Section As String, Cle As String, Fich As String)
As String
Dim Retour As Long
Dim Valeur As String

Valeur = String(256, 0) 'ici on considère qu'une valeur ne sera pas de
longueur supérieur à 256
' si vous travaillez avec des valeurs de grandes longueur augmentez ce
chiffre.
Retour = GetPrivateProfileString(Section, Cle, "", Valeur, 255, Fich)
If Retour > 0 Then 'renvoie la longueur de la valeur
Valeur = Left(Valeur, Retour) 'enlève les caractères en trop
Else
Valeur = "" 'elle n'existe pas
End If
LireCleIni = Valeur
End Function

Sub AutoOpen()
'*******************************
' nom du doc ayant la macro
'*******************************
If ActiveDocument.Name = "essai_pub2.doc" Then

' on déclare toutes les variables que l'on va utiliser
Dim NomChantier As String, NCh As String, PhaseTravaux As String, zone As
String, I_TravailAdresse As String, I_TravailContact As String, _
I_TravailFax As String, I_TravailMail As String, I_TravailTel As String,
CramAdresse As String, CramContact As String, CramFax As String, _
CramMail As String, CramTel As String, OppbtpAdresse As String,
OppbtpContact As String, OppbtpFax As String, OppbtpMail As String,
OppbtpTel As String, _
MedecineTravailAdresse As String, MedecineTravailFax As String

' ****** on se met dans l'entete du document *****************
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

NomChantier = LireCleIni("LISTE", "NomChantier", "C:\Mes
Documents\DI.ini")
With Selection.Find
.Text = "||NomChantier||"
.Replacement.Text = NomChantier
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

' on le fait pour tous les mots de l'entete

' ******** on ressort de l'entete du document ***********
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
' et on fait le remplacement pour les mots du corps du document
I_TravailAdresse = LireCleIni("LISTE", "I_TravailAdresse", "C:\Mes
Documents\DI.ini")
With Selection.Find
.Text = "||I_TravailAdresse||"
.Replacement.Text = I_TravailAdresse
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

' et on sauvegarde le tout
ActiveDocument.SaveAs FileName:= _
"nouvel_essai.doc", FileFormat:= _
wdFormatDocument, LockComments:=False, Password:="",
AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False,
EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False

Documents("nouvel_essai.doc").Close SaveChanges:=wdSaveChanges

End If

End Sub

Private Sub Document_Close()
Word.Application.Quit
End Sub

10 réponses

1 2
Avatar
Tisane
Rebonjour Maxou07,

j'ai un code vba développé avec w2000; j'aimerais savoir si celui-ci est
portable sur les versions w2003 et w2007.
pouvez-vous me renseigner ?


Le mieux est d'essayer, non ?
Plus sérieusement, tu ne devrais pas rencontrer de problème car le VBA
depuis la v2000 n'a pas beaucoup évolué.
En tout cas, de 2000 à 2003, les développements passent très bien.
Pas encore tout vérifié avec la v2007.
Attention à actualiser les références.

A toi de nous dire ;-)

--
Tisane

[...]

Avatar
Circé
Bonjour

J'ai rencontré pas mal de problèmes entre 2003 et 2007... Du VBA 2003
qui ne passaient pas avec 2007... :-s
Je pense par contre qu'il y a peu de problèmes de 2000 vers 2003.

On ne peut pas se permettre ici d'analyser chaque macro, on n'en
finirait pas... Le mieux est de tester.

Circé
http://faqword.free.fr

maxou07 a utilisé son clavier pour écrire :
bonjour,
j'ai un code vba développé avec w2000; j'aimerais savoir si celui-ci est
portable sur les versions w2003 et w2007.
pouvez-vous me renseigner ?
Merci d'avance.
Maxou 07

le code :

'*****************
'Déclaration des API à retranscrire sans erreur
'*****************
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias
"WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As Any, _
ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection& Lib "kernel32" Alias
"GetPrivateProfileSectionA" _
(ByVal lpAppName As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String)

Public Function ExisteSectionIni(Section As String, Fich As String) As
Boolean
Dim Retour As Long
Dim Valeur As String

Valeur = String(32767, 0) '32767 est la longueur maxi que peut avoir
une section
' Retour représente la longueur de la section, donc si elle est supérieure à
0, elle existe
Retour = GetPrivateProfileSection(Section, Valeur, 32766, Fich)
If Retour > 0 Then ExisteSectionIni = True
End Function

Public Function LireCleIni(Section As String, Cle As String, Fich As String)
As String
Dim Retour As Long
Dim Valeur As String

Valeur = String(256, 0) 'ici on considère qu'une valeur ne sera pas de
longueur supérieur à 256
' si vous travaillez avec des valeurs de grandes longueur augmentez ce
chiffre.
Retour = GetPrivateProfileString(Section, Cle, "", Valeur, 255, Fich)
If Retour > 0 Then 'renvoie la longueur de la valeur
Valeur = Left(Valeur, Retour) 'enlève les caractères en trop
Else
Valeur = "" 'elle n'existe pas
End If
LireCleIni = Valeur
End Function

Sub AutoOpen()
'*******************************
' nom du doc ayant la macro
'*******************************
If ActiveDocument.Name = "essai_pub2.doc" Then

' on déclare toutes les variables que l'on va utiliser
Dim NomChantier As String, NCh As String, PhaseTravaux As String, zone As
String, I_TravailAdresse As String, I_TravailContact As String, _
I_TravailFax As String, I_TravailMail As String, I_TravailTel As String,
CramAdresse As String, CramContact As String, CramFax As String, _
CramMail As String, CramTel As String, OppbtpAdresse As String,
OppbtpContact As String, OppbtpFax As String, OppbtpMail As String,
OppbtpTel As String, _
MedecineTravailAdresse As String, MedecineTravailFax As String

' ****** on se met dans l'entete du document *****************
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

NomChantier = LireCleIni("LISTE", "NomChantier", "C:Mes
DocumentsDI.ini")
With Selection.Find
.Text = "||NomChantier||"
.Replacement.Text = NomChantier
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

' on le fait pour tous les mots de l'entete

' ******** on ressort de l'entete du document ***********
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
' et on fait le remplacement pour les mots du corps du document
I_TravailAdresse = LireCleIni("LISTE", "I_TravailAdresse", "C:Mes
DocumentsDI.ini")
With Selection.Find
.Text = "||I_TravailAdresse||"
.Replacement.Text = I_TravailAdresse
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

' et on sauvegarde le tout
ActiveDocument.SaveAs FileName:= _
"nouvel_essai.doc", FileFormat:= _
wdFormatDocument, LockComments:úlse, Password:="",
AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:úlse,
EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:úlse, SaveFormsData:úlse, _
SaveAsAOCELetter:úlse

Documents("nouvel_essai.doc").Close SaveChanges:=wdSaveChanges

End If

End Sub

Private Sub Document_Close()
Word.Application.Quit
End Sub


Avatar
Geo

Dim NomChantier As String, NCh As String, PhaseTravaux As String, zone As
String, I_TravailAdresse As String, I_TravailContact As String, _
I_TravailFax As String, I_TravailMail As String, I_TravailTel As String,
CramAdresse As String, CramContact As String, CramFax As String, _
CramMail As String, CramTel As String, OppbtpAdresse As String,
OppbtpContact As String, OppbtpFax As String, OppbtpMail As String,
OppbtpTel As String, _
MedecineTravailAdresse As String, MedecineTravailFax As String


A vue de nez, il n'y a pas de raison.
Il y a une instruction qui me fait sursauter :
Dim NomChantier As String, NCh As String, PhaseTravaux As String, zone
As String, I_TravailAdresse As String, I_TravailContact As String, _
I_TravailFax As String, I_TravailMail As String, I_TravailTel As
String,
CramAdresse As String, CramContact As String, CramFax As String, _
CramMail As String, CramTel As String, OppbtpAdresse As String,
OppbtpContact As String, OppbtpFax As String, OppbtpMail As String,
OppbtpTel As String, _
MedecineTravailAdresse As String, MedecineTravailFax As String

C'est quand même plus lisible de faire un Dim pour chaque variable,
et ça surprend d'autant plus que le reste est bien présenté et bien
documenté.

--
A+

Avatar
maxou07
Merci à Tisane et à Circé pour votre réactivité.
Mon problème est que, actuellement, je n'ai ni w2003, ni w2007; donc il va
m'être très difficile de tester.

Maxou 07

"maxou07" a écrit dans le message de
news:46934d12$0$25914$
bonjour,
j'ai un code vba développé avec w2000; j'aimerais savoir si celui-ci est
portable sur les versions w2003 et w2007.
pouvez-vous me renseigner ?
Merci d'avance.
Maxou 07

le code :

'*****************
'Déclaration des API à retranscrire sans erreur
'*****************
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias
"WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As Any, _
ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection& Lib "kernel32" Alias
"GetPrivateProfileSectionA" _
(ByVal lpAppName As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String)

Public Function ExisteSectionIni(Section As String, Fich As String) As
Boolean
Dim Retour As Long
Dim Valeur As String

Valeur = String(32767, 0) '32767 est la longueur maxi que peut avoir
une section
' Retour représente la longueur de la section, donc si elle est supérieure
à

0, elle existe
Retour = GetPrivateProfileSection(Section, Valeur, 32766, Fich)
If Retour > 0 Then ExisteSectionIni = True
End Function

Public Function LireCleIni(Section As String, Cle As String, Fich As
String)

As String
Dim Retour As Long
Dim Valeur As String

Valeur = String(256, 0) 'ici on considère qu'une valeur ne sera pas
de

longueur supérieur à 256
' si vous travaillez avec des valeurs de grandes longueur augmentez ce
chiffre.
Retour = GetPrivateProfileString(Section, Cle, "", Valeur, 255, Fich)
If Retour > 0 Then 'renvoie la longueur de la valeur
Valeur = Left(Valeur, Retour) 'enlève les caractères en trop
Else
Valeur = "" 'elle n'existe pas
End If
LireCleIni = Valeur
End Function

Sub AutoOpen()
'*******************************
' nom du doc ayant la macro
'*******************************
If ActiveDocument.Name = "essai_pub2.doc" Then

' on déclare toutes les variables que l'on va utiliser
Dim NomChantier As String, NCh As String, PhaseTravaux As String, zone As
String, I_TravailAdresse As String, I_TravailContact As String, _
I_TravailFax As String, I_TravailMail As String, I_TravailTel As String,
CramAdresse As String, CramContact As String, CramFax As String, _
CramMail As String, CramTel As String, OppbtpAdresse As String,
OppbtpContact As String, OppbtpFax As String, OppbtpMail As String,
OppbtpTel As String, _
MedecineTravailAdresse As String, MedecineTravailFax As String

' ****** on se met dans l'entete du document *****************
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

NomChantier = LireCleIni("LISTE", "NomChantier", "C:Mes
DocumentsDI.ini")
With Selection.Find
.Text = "||NomChantier||"
.Replacement.Text = NomChantier
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

' on le fait pour tous les mots de l'entete

' ******** on ressort de l'entete du document ***********
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
' et on fait le remplacement pour les mots du corps du document
I_TravailAdresse = LireCleIni("LISTE", "I_TravailAdresse", "C:Mes
DocumentsDI.ini")
With Selection.Find
.Text = "||I_TravailAdresse||"
.Replacement.Text = I_TravailAdresse
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

' et on sauvegarde le tout
ActiveDocument.SaveAs FileName:= _
"nouvel_essai.doc", FileFormat:= _
wdFormatDocument, LockComments:úlse, Password:="",
AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:úlse,
EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:úlse, SaveFormsData:úlse, _
SaveAsAOCELetter:úlse

Documents("nouvel_essai.doc").Close SaveChanges:=wdSaveChanges

End If

End Sub

Private Sub Document_Close()
Word.Application.Quit
End Sub




Avatar
Tisane

Mon problème est que, actuellement, je n'ai ni w2003, ni w2007; donc il va
m'être très difficile de tester.


Tu peux toujours télécharger la version d'évaluation Office 2007 :
http://office.microsoft.com/fr-fr/products/HA101741481036.aspx
ou acheter une revue informatique en kiosque qui propose cette même version
sur un CD.
Je ne me souviens plus du nom de la revue, mais elle est sortie ce mois-ci.

--
Tisane


bonjour,
j'ai un code vba développé avec w2000; j'aimerais savoir si celui-ci est
portable sur les versions w2003 et w2007.
pouvez-vous me renseigner ?
Merci d'avance.
Maxou 07

le code :

'*****************
'Déclaration des API à retranscrire sans erreur
'*****************
[...]




Avatar
boblebob
j'ai copié ton code dans mon word 2007 mais c'est trop compliqué à vérifier,
désolé !
"maxou07" a écrit dans le message de news:
46934d12$0$25914$
bonjour,
j'ai un code vba développé avec w2000; j'aimerais savoir si celui-ci est
portable sur les versions w2003 et w2007.
pouvez-vous me renseigner ?
Merci d'avance.
Maxou 07

le code :

'*****************
'Déclaration des API à retranscrire sans erreur
'*****************
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias
"WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As Any, _
ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection& Lib "kernel32" Alias
"GetPrivateProfileSectionA" _
(ByVal lpAppName As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String)

Public Function ExisteSectionIni(Section As String, Fich As String) As
Boolean
Dim Retour As Long
Dim Valeur As String

Valeur = String(32767, 0) '32767 est la longueur maxi que peut avoir
une section
' Retour représente la longueur de la section, donc si elle est supérieure
à
0, elle existe
Retour = GetPrivateProfileSection(Section, Valeur, 32766, Fich)
If Retour > 0 Then ExisteSectionIni = True
End Function

Public Function LireCleIni(Section As String, Cle As String, Fich As
String)
As String
Dim Retour As Long
Dim Valeur As String

Valeur = String(256, 0) 'ici on considère qu'une valeur ne sera pas de
longueur supérieur à 256
' si vous travaillez avec des valeurs de grandes longueur augmentez ce
chiffre.
Retour = GetPrivateProfileString(Section, Cle, "", Valeur, 255, Fich)
If Retour > 0 Then 'renvoie la longueur de la valeur
Valeur = Left(Valeur, Retour) 'enlève les caractères en trop
Else
Valeur = "" 'elle n'existe pas
End If
LireCleIni = Valeur
End Function

Sub AutoOpen()
'*******************************
' nom du doc ayant la macro
'*******************************
If ActiveDocument.Name = "essai_pub2.doc" Then

' on déclare toutes les variables que l'on va utiliser
Dim NomChantier As String, NCh As String, PhaseTravaux As String, zone As
String, I_TravailAdresse As String, I_TravailContact As String, _
I_TravailFax As String, I_TravailMail As String, I_TravailTel As String,
CramAdresse As String, CramContact As String, CramFax As String, _
CramMail As String, CramTel As String, OppbtpAdresse As String,
OppbtpContact As String, OppbtpFax As String, OppbtpMail As String,
OppbtpTel As String, _
MedecineTravailAdresse As String, MedecineTravailFax As String

' ****** on se met dans l'entete du document *****************
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

NomChantier = LireCleIni("LISTE", "NomChantier", "C:Mes
DocumentsDI.ini")
With Selection.Find
.Text = "||NomChantier||"
.Replacement.Text = NomChantier
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

' on le fait pour tous les mots de l'entete

' ******** on ressort de l'entete du document ***********
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
' et on fait le remplacement pour les mots du corps du document
I_TravailAdresse = LireCleIni("LISTE", "I_TravailAdresse", "C:Mes
DocumentsDI.ini")
With Selection.Find
.Text = "||I_TravailAdresse||"
.Replacement.Text = I_TravailAdresse
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

' et on sauvegarde le tout
ActiveDocument.SaveAs FileName:= _
"nouvel_essai.doc", FileFormat:= _
wdFormatDocument, LockComments:úlse, Password:="",
AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:úlse,
EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:úlse, SaveFormsData:úlse, _
SaveAsAOCELetter:úlse

Documents("nouvel_essai.doc").Close SaveChanges:=wdSaveChanges

End If

End Sub

Private Sub Document_Close()
Word.Application.Quit
End Sub




Avatar
maxou07
Bonjour,
c'est vrai que c'est touffu; je vais corriger....mais je viens du Php alors
les déclarations de variables...çà me gonfle un peu.
Merci pour votre aide
Maxou 07


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

Dim NomChantier As String, NCh As String, PhaseTravaux As String, zone
As


String, I_TravailAdresse As String, I_TravailContact As String, _
I_TravailFax As String, I_TravailMail As String, I_TravailTel As String,
CramAdresse As String, CramContact As String, CramFax As String, _
CramMail As String, CramTel As String, OppbtpAdresse As String,
OppbtpContact As String, OppbtpFax As String, OppbtpMail As String,
OppbtpTel As String, _
MedecineTravailAdresse As String, MedecineTravailFax As String


A vue de nez, il n'y a pas de raison.
Il y a une instruction qui me fait sursauter :
Dim NomChantier As String, NCh As String, PhaseTravaux As String, zone
As String, I_TravailAdresse As String, I_TravailContact As String, _
I_TravailFax As String, I_TravailMail As String, I_TravailTel As
String,
CramAdresse As String, CramContact As String, CramFax As String, _
CramMail As String, CramTel As String, OppbtpAdresse As String,
OppbtpContact As String, OppbtpFax As String, OppbtpMail As String,
OppbtpTel As String, _
MedecineTravailAdresse As String, MedecineTravailFax As String

C'est quand même plus lisible de faire un Dim pour chaque variable,
et ça surprend d'autant plus que le reste est bien présenté et bien
documenté.

--
A+





Avatar
maxou07
Bonjour,
Compliqué ? non!
de fait il suffit de faire un .ini avec 2 ou 3 valeurs car le reste est
ignoré.
merci quand meme d'avoir essayé
Maxou 07


"boblebob" <a> a écrit dans le message de
news:
j'ai copié ton code dans mon word 2007 mais c'est trop compliqué à
vérifier,

désolé !
"maxou07" a écrit dans le message de news:
46934d12$0$25914$
bonjour,
j'ai un code vba développé avec w2000; j'aimerais savoir si celui-ci est
portable sur les versions w2003 et w2007.
pouvez-vous me renseigner ?
Merci d'avance.
Maxou 07

le code :

'*****************
'Déclaration des API à retranscrire sans erreur
'*****************
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias
"WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As Any, _
ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection& Lib "kernel32" Alias
"GetPrivateProfileSectionA" _
(ByVal lpAppName As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String)

Public Function ExisteSectionIni(Section As String, Fich As String) As
Boolean
Dim Retour As Long
Dim Valeur As String

Valeur = String(32767, 0) '32767 est la longueur maxi que peut avoir
une section
' Retour représente la longueur de la section, donc si elle est
supérieure


à
0, elle existe
Retour = GetPrivateProfileSection(Section, Valeur, 32766, Fich)
If Retour > 0 Then ExisteSectionIni = True
End Function

Public Function LireCleIni(Section As String, Cle As String, Fich As
String)
As String
Dim Retour As Long
Dim Valeur As String

Valeur = String(256, 0) 'ici on considère qu'une valeur ne sera pas
de


longueur supérieur à 256
' si vous travaillez avec des valeurs de grandes longueur augmentez ce
chiffre.
Retour = GetPrivateProfileString(Section, Cle, "", Valeur, 255,
Fich)


If Retour > 0 Then 'renvoie la longueur de la valeur
Valeur = Left(Valeur, Retour) 'enlève les caractères en trop
Else
Valeur = "" 'elle n'existe pas
End If
LireCleIni = Valeur
End Function

Sub AutoOpen()
'*******************************
' nom du doc ayant la macro
'*******************************
If ActiveDocument.Name = "essai_pub2.doc" Then

' on déclare toutes les variables que l'on va utiliser
Dim NomChantier As String, NCh As String, PhaseTravaux As String, zone
As


String, I_TravailAdresse As String, I_TravailContact As String, _
I_TravailFax As String, I_TravailMail As String, I_TravailTel As String,
CramAdresse As String, CramContact As String, CramFax As String, _
CramMail As String, CramTel As String, OppbtpAdresse As String,
OppbtpContact As String, OppbtpFax As String, OppbtpMail As String,
OppbtpTel As String, _
MedecineTravailAdresse As String, MedecineTravailFax As String

' ****** on se met dans l'entete du document *****************
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow.
_


ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

NomChantier = LireCleIni("LISTE", "NomChantier", "C:Mes
DocumentsDI.ini")
With Selection.Find
.Text = "||NomChantier||"
.Replacement.Text = NomChantier
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

' on le fait pour tous les mots de l'entete

' ******** on ressort de l'entete du document ***********
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
' et on fait le remplacement pour les mots du corps du document
I_TravailAdresse = LireCleIni("LISTE", "I_TravailAdresse", "C:Mes
DocumentsDI.ini")
With Selection.Find
.Text = "||I_TravailAdresse||"
.Replacement.Text = I_TravailAdresse
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

' et on sauvegarde le tout
ActiveDocument.SaveAs FileName:= _
"nouvel_essai.doc", FileFormat:= _
wdFormatDocument, LockComments:úlse, Password:="",
AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:úlse,
EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:úlse, SaveFormsData:úlse, _
SaveAsAOCELetter:úlse

Documents("nouvel_essai.doc").Close SaveChanges:=wdSaveChanges

End If

End Sub

Private Sub Document_Close()
Word.Application.Quit
End Sub








Avatar
maxou07
Merci, je n'avais pas du tout pensé à çà.
Maxou 07

"Tisane" a écrit dans le message de
news:46937143$0$27380$

Mon problème est que, actuellement, je n'ai ni w2003, ni w2007; donc il
va


m'être très difficile de tester.


Tu peux toujours télécharger la version d'évaluation Office 2007 :
http://office.microsoft.com/fr-fr/products/HA101741481036.aspx
ou acheter une revue informatique en kiosque qui propose cette même
version

sur un CD.
Je ne me souviens plus du nom de la revue, mais elle est sortie ce
mois-ci.


--
Tisane


bonjour,
j'ai un code vba développé avec w2000; j'aimerais savoir si celui-ci
est



portable sur les versions w2003 et w2007.
pouvez-vous me renseigner ?
Merci d'avance.
Maxou 07

le code :

'*****************
'Déclaration des API à retranscrire sans erreur
'*****************
[...]







Avatar
Geo

Bonjour,
c'est vrai que c'est touffu; je vais corriger....mais je viens du Php alors
les déclarations de variables...çà me gonfle un peu.


Il n'est pas obligatoire de déclarer les variables, il suffit de ne pas
mettre Option Explicit en tête,
mais je ne cesse de recommander de l'utiliser car une simple faute de
frappe dans un nom peut faire perdre des heures.
Sinon j'ai fait comme boblebob, et jj'ai déroulé les premières
instructions, mais ne suis pas allé bien loin, par exemple mon dossier
Mes Documents n'est pas sur C: et vous seul pourrez savoir si le
résultat est correct. Pour l'instant c'est OK en compile.

--
A+

1 2