[Résolu] Macro qui tourne en boucle

Tommy_11

XLDnaute Nouveau
Bonjour à tous,

J'ai un classeur avec différents onglets "Client" calqué sur le même modèle et une feuille "BD" (base de données) qui est remplie mensuellement par les opérateurs.
Le but de la manœuvre est de mettre à jour toutes les fiches clients à partir de cette base de données et qu'un message signale une fiche client présente sur la base de données mais non créée.
Jusque là tout allait bien (enfin dans ma tête en tout cas :)) sauf que la macro tourne en boucle un certain nombre de fois avant de se terminer.

J'ai beau exécuter la macro pas à pas je n'arrive à déterminer l'erreur.
Mon fichier d'origine contient plus d'une centaine de lignes donc c'est un peu gênant :D

Je vous joins un fichier qui je pense sera plus clair que moi.

Merci d'avance!!
 

Pièces jointes

  • testmaj.xls
    44.5 KB · Affichages: 39
  • testmaj.xls
    44.5 KB · Affichages: 44
  • testmaj.xls
    44.5 KB · Affichages: 40
Dernière édition:

Grand Chaman Excel

XLDnaute Impliqué
Re : Macro qui tourne en boucle

Bonjour Tommy_11 et bienvenue sur le forum,

Une approche différente :

VB:
Sub Bouton1_QuandClic()
   Dim rg As Range, c As Range, ws As Worksheet
   Application.ScreenUpdating = False
   Set rg = Sheets("BD").Range("A2:A5") '<<< Adapter
   For Each c In rg
      Set ws = Nothing
      On Error Resume Next
      Set ws = Sheets("Client " & c)
      On Error GoTo 0
      If ws Is Nothing Then MsgBox "La fiche du client " & c.Value & " n'a pas été créée.", vbOKOnly + vbInformation, "Alerte"
   Next c
      
   Application.ScreenUpdating = True

End Sub
 

Grand Chaman Excel

XLDnaute Impliqué
Re : Macro qui tourne en boucle

Re-bonjour,
Petite correction au code pour aller écrire dans la cellule B3 de la feuille trouvée, la valeur du dernier solde :

VB:
Sub Bouton1_QuandClic()
   Dim rg As Range, c As Range, ws As Worksheet
   Application.ScreenUpdating = False
   Set rg = Sheets("BD").Range("A2:A5") '<<< Adapter
   For Each c In rg
      Set ws = Nothing
      On Error Resume Next
      Set ws = Sheets("Client " & c)
      On Error GoTo 0
      If ws Is Nothing Then
         MsgBox "La fiche du client " & c.Value & " n'a pas été créée.", vbOKOnly + vbInformation, "Alerte"
      Else
         ws.Cells(3, 2) = c.Offset(0, 250).End(xlToLeft)
      End If
   Next c
      
   Application.ScreenUpdating = True

End Sub
 

Tommy_11

XLDnaute Nouveau
Re : Macro qui tourne en boucle

Bonjour et merci pour votre aide!

J'ai testé ton code Grand Chaman et il marche super bien!! Merci

Sauf que j'ai un souci du coup avec cette ligne :
HTML:
Set ws = Sheets("Client " & c)
Cela fonctionne que si tous les noms de mes fiches commencent par client mais ce n'est pas le cas (javais oublié de le préciser, ma faute sorry) d'où mon
HTML:
For i = 1 To Sheets.Count
   'élimination des feuilles non concernées par la procédure de mise à jour
    If Sheets(i).Name <> "Annexe1" And Sheets(i).Name <> "Annexe2" And Sheets(i).Name <> "BD" Then
        If Sheets(i).[A1] = "Client" Then
J'ai bien essayé de l'insérer dans ton code mais sa marche plus. Sa devient trop complexe pour moi :s
 

Pièces jointes

  • testmaj2.xls
    45 KB · Affichages: 34

Grand Chaman Excel

XLDnaute Impliqué
Re : Macro qui tourne en boucle

Bonjour,
Dans ce cas, essayer ceci :

VB:
   Dim rg As Range, c As Range, ws As Worksheet, bExiste As Boolean
   Application.ScreenUpdating = False
   Set rg = Sheets("BD").Range("A2:A" & [A65536].End(xlUp).Row)   'plage de données allant de A2 jusqu'à la dernière cellule remplie de la colonne A
   For Each c In rg
      bExiste = False
      For Each ws In ThisWorkbook.Worksheets
         With ws
            If .Name <> "Annexe1" And .Name <> "Annexe2" And .Name <> "BD" And .Range("A1") = "Client" And .Range("B1") = c.Value Then
               ws.Cells(3, 2) = c.Offset(0, 250).End(xlToLeft)
               bExiste = True
            End If
         End With
      Next ws
      If Not bExiste Then
         MsgBox "La fiche du client " & c.Value & " n'a pas été créée.", vbOKOnly + vbInformation, "Alerte"
      End If
   Next c
   Application.ScreenUpdating = True

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 201
Messages
2 086 171
Membres
103 151
dernier inscrit
nassim