Microsoft 365 Remplacer une chaine de caractère d'un code VBA par un autre code VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

matlatarte

XLDnaute Junior
Bonjour, j'aimerai pour éviter un bug un peu aléatoire remplacer toutes les chaines "xxx" par exemple de mon projet VBA (il y en a 4 dans différents modules, module de classe et feuille) par "yyy".

Soit un lancement automatique à l'ouverture du classeur soit par macro / bouton. Est ce possible ?


Merci !
 
Bonjour, oui changer une chaine de caractère de macro avec une macro...

j'ai plusieurs macros qui sont en lien et la seule solution possible trouvée est de la renommer pour éviter un bug (visible lors de la compilation). Ce bug à l'air d'arriver à chaque déplacement de fichier ou nouvelle version enregistrée mais pas toujours d'où mon aléatoire...

voici les codes que je remodifie pour corriger le bug!


Private Sub Seq_EvTERMINAL()
Debug.Print "Fin"
With ActiveSheet.Shapes("sisteractimage")
.Fill.ForeColor.RGB = RGB(255, 255, 255)

End With
End Sub



Public Event EvTERMINAL()



Private Sub Ryth_Intervient(ByVal Tic As Long)
On Error Resume Next
QueryPerformanceCounter Cyc: CycCum = Cyc - CycBase
Temps = CycCum / Fréq + 0.05: RaiseEvent EvChrono(Temps)
If Temps > Dep And Not BDepart Then
BDepart = True
RaiseEvent EvDepart
End If
'SI BUG EvTERMINAL... ALORS RENOMMER LES 3 ENTITES DU PROJET ET CA ROULE
If Temps > Fin And Not BFin Then
RaiseEvent EvTERMINAL
BFin = True
Ryth.Stopper
End If
If Temps > TimeOut Then
Ryth.Stopper
Set Ryth = Nothing
Debug.Print "TimeOut"
End If
End Sub


Je renomme les 3 "EvTERMINAL" en "evterm" par exemple et c'est reparti ! Je ne sais pas vraiment d'où cela vient... Une idée ?
 
Bonjour à tous 😉,

Je reste un peu dubitatif sur comment interpréter la question.

Pourquoi ne pas tout simplement passer en mode VBA et utiliser le remplacement Ctrl+h ?

Mais je pense que c'est sans doute un peu plus compliqué que ça...
 
Pourquoi ne pas tout simplement passer en mode VBA et utiliser le remplacement Ctrl+h ?
Vu qu'il n'y a que trois occurrences, ça peut même se faire 100 % manuellement sans utiliser le <Ctrl>+<H> en allant directement à chacune des trois occurrences. Mais c'est plus long... 😉


Perso, ce qui m'intéresse dans la question, c'est de savoir pourquoi ça plante, pourquoi en changeant le nom ça fonctionne, et comment modifier le code pour que ça ne plante tout simplement plus.
 
Effectivement lorsque le bug arrive cela me prend 2 min en manuel... Redémarrer excel etc... Mais à force cela me fatigue ! J'ulitise ce fichier tous les jours... D'où ma demande pour au moins palier à cette perte de temps en créant quelque-chose d'automatique.
Et oui je ne sais absolument pas pourquoi ni comment cela résoud le problème en renommant les occurences mais cela marche ! Le mieux serait de régler la source du problème effectivement...
 
Une suggestion à propos d'un objet Sequenceur trouvé dans un autre de vos classeur : Remplacez ça :
Set Seq = New Sequenceur
par :
VB:
   If Seq Is Nothing Then Set Seq = New Sequenceur Else Seq.Stopper
Parce que je ne sais pas ce qui arriverait si votre variable Seq était déjà initialisée et active !
Par ailleurs et par expérience c'est dangereux de changer une cellule dans une procédure exécutée via un timer.
Évitez donc Range("Chrono").Value = Temps dans Private Sub Seq_EvChrono(ByVal Temps As Double)
Affichez le temps plutôt dans un Shape, voire un UserForm.
 
Bonjour oui c'est possible
mais si tes events créent un problème et te plante le fichier excel c'est que les écoutes sont mal instanciées voir si répétition object de l'event perdu ou en retard d'un ou plusieurs index
je dis ca (n'ayant pas le code dans son entièreté ) en suputant que tu multiplie les mise ajour de tes pseudo events avec un timer sous quelque form que ce soit
cependant si tu tiens a modifier tes codes Vba dynamico dans tout tes modules
voici comment on fait
VB:
'patricktoulon
'a appeller a l'open ou par un bouton  ou tout autres méthode


'References à activer
' /'''''''''''''''''''''''''''''''''''''''''''''''''''''''\
'< microsoft VisualBasic for Application Extensibility 5.1 >
' \......................................................./

' il faut bien evidemment cocher dans les option d'excel "Acces approve" au model d

' /''''''''''''''''''''''''''''''''''''''''''''''\
'< Acces approuve au model d'object du projet vba.>
' \............................................../


Sub changeeventExpression()
    Dim vbcomps, vbcomp, Code$, NewCode$
    'collection de modules
    Set vbcomps = ThisWorkbook.VBProject.VBComponents
    
    'boucle sur les modules tout type confondu
    For Each vbcomp In vbcomps
        If vbcomp.Name <> "Module1" Then 'bien sur !!!on evite evidemment de modifier celui de la macro elle même
            If vbcomp.CodeModule.CountOfLines > 0 Then
                
                'recupération du code
                Code = vbcomp.CodeModule.Lines(1, vbcomp.CodeModule.CountOfLines)
                
                'remplacement d'expression dans le code
                NewCode = Replace(Code, "xxx", "yyy")
                
                'effacer le code du module
                vbcomp.CodeModule.DeleteLines 1, vbcomp.CodeModule.CountOfLines
                
                'inscription du nouveau code
                vbcomp.CodeModule.InsertLines 1, NewCode
            End If
        End If
     DoEvents
    Next
  
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
32
Affichages
975
Retour