Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1533 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Excel - Macro] Boucle Do, trouver l'erreur...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Excel - Macro] Boucle Do, trouver l'erreur...

n°2147425
ComboFab
Posté le 28-06-2012 à 10:18:00  profilanswer
 

Bonjour à tous, c'est la 1ère fois que je m'inscris sur un forum du genre.
 
Voici mon problème : j'ai créé une macro qui ne fonctionne pas. "Erreur de compilation: Sub ou Function non définie".
Voici ce que je veux que ma macro fasse pour moi : sur la feuille "Totaux" et sur toutes les suivantes, je veux chercher et remplacer tous les "Aria" par des "Jockare".
 
Pour ce faire, mon idée est d'ajouter une feuille
1) Ajout d'une feuille à la fin du classeur Excel et la renommer en "aeffacer".
2) Sélection de la feuille "Totaux".
3) Lancement d'une boucle qui remplace "Aria" par "Jockare" sur la feuille sélectionnée et qui sélectionne ensuite la page suivante. La boucle s'arrête quand la feuille "aeffacer" est sélectionnée.
4) Suppression de la dernière feuille.
 
Et voici le code (qui ne fonctionne pas)...
 
Sub SwitchCAC()
'
' SwitchCAC Macro
'
        Sheets.Add After:=Sheets(Sheets.Count) 'ajoute une feuille à la fin du classeur
        Sheets(Sheets.Count).Select
         
        Sheets(Sheets.Count).Select 'renomme dernière feuille
        ActiveSheet.Name = "aeffacer"
         
        ActiveWindow.ScrollWorkbookTabs Position:=xlLast 'sélectionne la feuille "Totaux"
        Sheets.Add After:=Sheets(Sheets.Count)
        Sheet("Totaux" ).Select
   
   Do 'boucle qui remplace "Jockare par "Vide04" jusqu'à ce que la feuille "aeffacer" soit sélectionnée
        Cells.Replace What:="Aria", Replacement:="Jockare", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        ActiveSheet.Next.Select
   Loop Until ActiveSheet.Next.Name = "aeffacer"
         
            Application.DisplayAlerts = False 'supprime la dernière feuille sans confirmation
            Sheets(Sheets.Count).Select
            ActiveWindow.SelectedSheets.Delete
            Application.DisplayAlerts = True
End Sub
 
Dans l'idéal, je voudrais non seulement que cette macro fonctionne, mais aussi qu'elle puisse fonctionner sur base d'un formulaire de remplacement. J'entends par là qu'elle ne remplace pas "Aria" par "Jockare" mais "X" par "Y" en ayant pour consigne que "X" se trouve dans telle case sur telle feuille et idem pour "Y".
 
Je ne sais pas si je suis assez clair et si je formule les choses comme elles doivent l'être. Alors soyez indulgents avec moi svp.
 
Merci d'avance à tous !


---------------
ComboFab
mood
Publicité
Posté le 28-06-2012 à 10:18:00  profilanswer
 

n°2147432
vave
Nice to meet me
Posté le 28-06-2012 à 11:00:21  profilanswer
 

Bonjour,
 
Si tu veux faire le remplacement sur toutes les feuilles de ton classeur, tu peux boucler dessus :

Code :
  1. Sub remplacer()
  2. Dim sh As Worksheet
  3. For Each sh In Worksheets
  4.     sh.Cells.Replace What:="aa", Replacement:="xx", LookAt:=xlPart, _
  5.     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
  6.     ReplaceFormat:=False
  7. Next sh
  8. End Sub


Si tu veux exclure certains onglets, tu rajoute un test :

Code :
  1. For Each sh In Worksheets
  2.     If sh.Name <> "Feuil2" Then
  3.        sh.Cells.Replace What:="aa", Replacement:="xx", LookAt:=xlPart, _
  4.        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
  5.        ReplaceFormat:=False
  6.     End If
  7. Next sh


 
 
 

Citation :

Dans l'idéal, je voudrais non seulement que cette macro fonctionne, mais aussi qu'elle puisse fonctionner sur base d'un formulaire de remplacement. J'entends par là qu'elle ne remplace pas "Aria" par "Jockare" mais "X" par "Y" en ayant pour consigne que "X" se trouve dans telle case sur telle feuille et idem pour "Y".


Pour ça, tu déclares tes 2 variables :

Code :
  1. Sub remplacer()
  2. Dim sh As Worksheet
  3. Dim x As String
  4. Dim y As String


 
Tu leur affecte les valeurs des cellules que tu veux :

Code :
  1. x = sheets("toto" ).range("A1" )
  2. y = sheets("tata" ).range("B2" )


 
Ensuite, tu remplaces les valeurs en dur de ton code par ces variables :

Code :
  1. For Each sh In Worksheets
  2.     sh.Cells.Replace What:=x, Replacement:=y, LookAt:=xlPart, _
  3.     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
  4.     ReplaceFormat:=False
  5. Next sh


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
n°2147437
ComboFab
Posté le 28-06-2012 à 11:34:12  profilanswer
 

Salut oovaveoo,
 
j'ai une question à te poser : je peux mettre une photo de toi sur mon bureau? Parce que t'es ma nouvelle idole ! ;->
 
Je blague mais c'est vrai que je suis un peu dégouté quand je vois à quel point ton code est court alors que moi je me cassais la tête. Enfin bon, faut dire que je ne connais rien en VBA ni en programmation. J'apprends sur le tas...
 
J'ai juste rajouter un petit truc pour effacer le formulaire à la fin de la macro. Ca donne ceci :
 
Sub Remplacer_X_par_Y()
Dim sh As Worksheet
Dim x As String
Dim y As String
x = Sheets("Totaux" ).Range("B43" )
y = Sheets("Totaux" ).Range("D43" )
For Each sh In Worksheets
        sh.Cells.Replace What:=x, Replacement:=y, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Next sh
Sheets("Totaux" ).Select
Range("B43" ).Select
Selection.ClearContents
Range("D43" ).Select
Selection.ClearContents
End Sub
 
Ca fonctionne nickel. Encore merci beaucoup!


---------------
ComboFab
n°2147455
vave
Nice to meet me
Posté le 28-06-2012 à 13:38:18  profilanswer
 

:D  
 
Par contre, tant que j'y suis :
pour améliorer les temps d'exécution, il faut éviter un maximum les ".select" ou ".activate".
 
Donc, pour ton code, remplacer :

Code :
  1. Range("B43" ).Select
  2. Selection.ClearContents


par :

Code :
  1. Range("B43" ).ClearContents


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
n°2147456
ComboFab
Posté le 28-06-2012 à 13:42:37  profilanswer
 

Et encore une fois...Merci !!!
 
;->


---------------
ComboFab

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Excel - Macro] Boucle Do, trouver l'erreur...

 

Sujets relatifs
[VB/VBA/VBS]Trouver une référence dans plusieurs centaines de wordRecherche Excel / Dernier événement
macro excel / classement de valeursOptimiser une boucle en OpenCL
macro Excel pour un graphique dynamiqueErreur d'exécution 1004
Macro recherche de contenu[VBA / Excel] supprimer une ligne sur deux
Plus de sujets relatifs à : [Excel - Macro] Boucle Do, trouver l'erreur...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR