If Val(Application.Version) = 8 Then ' Ton code Else ' Replace = replace(.... End If
On resume Next Replace = replace... If Err>0 then 'ton code
Private Sub CommandButton1_Click() Dim titi As String On Error Resume Next titi = toto("blabla") End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPublic Function ReplaceBis(texte As String, a_remplacer As String, remplacer_par As String, Optional startpos, Optional combien, Optional Compare As VbCompareMethod) As String If IsMissing(startpos) Then startpos = 1 If IsMissing(combien) Then combien = -1 If IsMissing(Compare) Then Compare = vbBinaryCompare If Val(Application.Version) = 8 Then ' Version 97 Dim pos As Integer, nb As Integer Do While InStr(startpos, texte, a_remplacer, Compare) nb = nb + 1 'Ici il faut encore prendre en compte la valeur -1 de la fonction replace If combien > 0 And nb > combien Then Exit Do pos = InStr(startpos, texte, a_remplacer, Compare) texte = Mid(texte, 1, pos - 1) & remplacer_par & Mid(texte, pos + Len(a_remplacer)) startpos = pos + Len(a_remplacer) + 1 Loop ReplaceBis = texte Else ReplaceBis = Replace(texte, a_remplacer, remplacer_par, startpos, combien, Compare) End If End Function Sub es() Debug.Print ReplaceBis("Un texte", "texte", "Truc") End Sub
Quant au test sur la version c'est l'emploi Application.Version, qu'on peut mettre directement dans la fonction. On comprend la simplicité. Cela évite de mettre un test à chaque ligne où on code Replace...
Public Function ReplaceBis(texte As String, a_remplacer As String, remplacer_par As String, Optional startpos, Optional combien, Optional Compare As VbCompareMethod) As String If IsMissing(startpos) Then startpos = 1 If IsMissing(combien) Then combien = -1 If IsMissing(Compare) Then Compare = vbBinaryCompare Dim Version As Boolean Version (Val(Application.Version) 8) ' Version vaut True si Version Excel 97 #If Version Then ' Version 97 Dim pos As Integer, nb As Integer Do While InStr(startpos, texte, a_remplacer, Compare) nb = nb + 1 'Ici il faut encore prendre en compte la valeur -1 de la fonction replace If combien > 0 And nb > combien Then Exit Do pos = InStr(startpos, texte, a_remplacer, Compare) texte = Mid(texte, 1, pos - 1) & remplacer_par & Mid(texte, pos + Len(a_remplacer)) startpos = pos + Len(a_remplacer) + 1 Loop ReplaceBis = texte #Else MsgBox "ok" ReplaceBis = Replace(texte, a_remplacer, remplacer_par, startpos, combien, Compare) #End If End Function Sub es() Debug.Print ReplaceBis("Un texte", "texte", "Truc") End Sub
' Si Mac prend la valeur true, exécute les instructions suivant le #If. #If Mac Then '. Placez uniquement des instructions Mac ici. '. '. ' S'il s'agit d'un programme Windows 32 bits, faites ceci: #ElseIf Win32 Then '. Placez uniquement des instructions Windows 32 bits ici. '. '. ' Si votre programme n'est ni un programme Mac ni un programme Windows 32 ' bits, faites ceci: #Else '. Placez les instructions de la plate-forme appropriée ici. '. '. #End If
toto = Val(Application.Version) MsgBox toto #If toto = 8 Then titi = 3 #ElseIf toto 12 Then '>> mets TON numéro de version titi = 4 #End If MsgBox titi ' ===>> n'affichera pas 4 car n'aura pas connu toto
toto = Val(Application.Version) MsgBox toto #If toto = 8 Then titi = 3 #ElseIf toto = 12 Then titi = 4 #ElseIf toto = 0 Then titi = 5 #End If MsgBox titi ' ===>> t'affichera 5 car toto = 0 !
Mais ne peut marcher que si Version est une CONSTANTE, elle-même conditionelle (#Const ...)
Et n'acceptera alors pas Application.Version
Et si déclare unes variable toto normalement ===>> elle est perdue dans la compil conditionnelle.
Dim Version As Boolean Version (Val(Application.Version) 8) ' Version vaut True si Version Excel 97
#If Version Then
' Si Mac prend la valeur true, exécute les instructions suivant le #If. #If Mac Then '. Placez uniquement des instructions MAC ici. etc
#Else MsgBox "ok" ReplaceBis = Replace(texte, a_remplacer, remplacer_par, startpos, combien, Compare) #End If
Visual Basic pour Applications définit des constantes exclusivement utilisées avec la consigne #If...Then...#Else. Ces constantes sont fonctionnellement identiques à celles définies avec la consigne #If...Then...#Else, mais ont cependant une portée globale, c'est-à-dire qu'elles s'appliquent à l'ensemble d'un projet.
Sur les plates-formes de développement 16 bits, les constantes de compilation sont définies de la manière suivante :
Constante Valeur Description
Win16 True Indique que l'environnement de développement est en 16 bits.
Win32 False Indique que l'environnement de développement n'est pas en 32 bits.
Sur les plates-formes de développement 32 bits, les constantes de compilation sont définies de la manière suivante :
Constante Valeur Description
Vba6 True Indique que l'environnement de développement est Visual Basic pour Applications, version 6.0.
Vba6 False Indique que l'environnement de développement n'est pas Visual Basic pour Applications, version 6.0.
Win16 False Indique que l'environnement de développement n'est pas en 16 bits.
Win32 True Indique que l'environnement de développement est en 32 bits.
Mac False Indique que l'environnement de développement n'est pas Macintosh.
Win16 False Indique que l'environnement de développement n'est pas en 16 bits.
Win32 False Indique que l'environnement de développement est en 32 bits Windows.
Mac True Indique que l'environnement de développement est Macintosh.
Note Ces constantes étant définies par Visual Basic, vous ne pouvez, à aucun niveau, définir des constantes portant le même nom.
Littéral, autre constante ou toute autre combinaison pouvant contenir tout opérateur arithmétique ou logique à l'exception de Is
Public Function Replace(texte As String, a_remplacer As String, remplacer_par As String, Optional startpos, Optional combien, Optional Compare As VbCompareMethod) As String Dim pos As Integer, nb As Integer If IsMissing(startpos) Then startpos = 1 If IsMissing(combien) Then combien = 0 Do While InStr(startpos, texte, a_remplacer, Compare) nb = nb + 1 If combien > 0 And nb > combien Then Exit Do pos = InStr(startpos, texte, a_remplacer, Compare) texte = Mid(texte, 1, pos - 1) & remplacer_par & Mid(texte, pos + Len(a_remplacer)) startpos = pos + Len(a_remplacer) + 1 Loop Replace = texte End Function
Private Sub Workbook_Activate() On Error Resume Next If Val(Application.Version) < 9 Then Exit Sub With ThisWorkbook.VBProject.VBComponents .Remove .Item("abracadabra") End With End Sub