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

1 réponse

1 2
Avatar
maxou07
je vais mettre le fichier à la racine de C:
comme çà je n'aurais pas de problème avec les différentes versions de window
et les possibles chemins de Mes Documents
Merci de cette précision à laquelle je n'avais pas fait attention
Maxou 07
"Geo" a écrit dans le message de
news:

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