XL 2013 VBA - boucle et gestion des filtres TCD [RESOLU]

VERHAEGHE Jean-Baptiste

XLDnaute Nouveau
Bonjour la communauté,

Je viens vers vous car je rencontre un soucis dans un projet que j'ai vis à vis des filtres dans des TCD.

Pour faire simple, ma macro récupère un matricule et vient le mettre dans le champ du filtre puis actualise le TCD. De cette manière, le TCD est mis à jour en fonction du matricule récupéré et des formules viennent chercher les informations requises pour mettre à jours des tableaux & des graphs.

Le problème que je rencontre est qu'il peut arriver que le matricule sélectionné ne soit pas dans la liste des possibilité auquel cas la macro ne bloque pas et garde les informations du dernier matricule trouvé ce qui me donne des choux avec des carottes et j'aime pas trop ça ^^

J'ai contourné le problème en insérant manuellement la liste des tous les matricules à la fin de ma base de donnée mais je suis certainement comme la plupart d'entre vous, je hais le travail manuel !

Aussi, une âme charitable aurait-il la possibilité de me venir en aide ?

Vous trouverez ci-dessous une partie de mon code.

je vous remercie par avance pour toute l'aide et le temps consacré à ma requête.


VB:
Sub Export_TDB_OTP()

  Dim Affaires As String
  Dim Centre_profit As String
  Dim CheminFicExport As String
  Dim OTP_Court As String
  Dim TDB_Periode As String
 
  Application.Cursor = xlWait                                 'Affiche le sablier
  Application.ScreenUpdating = False                          'Désactivation du raffraichissement écran
  Application.DisplayAlerts = False                           'Désactivation des messages d'alertes et les questions

   
      For Each No_OTP In Range("OTP")
    If (Sheets("START").Cells(No_OTP.Row, 6).Value = "ok") Then
      Affaires = No_OTP.Text
      CheminFicExport = Sheets("START").Cells(No_OTP.Row, 5).Value
      OTP_Court = Sheets("START").Cells(No_OTP.Row, 4).Value
      TDB_Periode = Sheets("START").Range("PERIODE_TDB").Value
   
'Mise à jour des données ------------------------------------------------------------------------------------------

    Sheets("TCD").Select
    Range("SPF_AFFAIRES").Select
    Range("SPF_AFFAIRES") = Sheets("START").Cells(No_OTP.Row, 3).Value
    Selection.NumberFormat = "@"
    ActiveSheet.PivotTables("TCD_SPF").PivotCache.Refresh


    Sheets("TCD").Select
    Range("SATURN_AFFAIRES").Select
    Range("SATURN_AFFAIRES") = Sheets("START").Cells(No_OTP.Row, 3).Value
    Selection.NumberFormat = "@"
    ActiveSheet.PivotTables("TCD_SATURN").PivotCache.Refresh


    Sheets("CALCUL CJIF").Select
    Range("CJIF_AFFAIRES").Select
    Range("CJIF_AFFAIRES") = Sheets("START").Cells(No_OTP.Row, 3).Value
    Selection.NumberFormat = "@"
 

Iznogood1

XLDnaute Impliqué
Bonjour,

Peut-être peux-tu tester la présence du matricule dans la source avant d'éxécuter le reste du code
Code:
Function IsPresent(matricule As String) As Boolean
  Dim r As Range
  Set r = Feuil1.Range("A:A").Find(matricule )
  IsPresent = Not r Is Nothing
End Function
Bien sûr, remplace Feuil1.Range("A:A") par la bonne référence (données sources du TCD)

puis plus loin
Code:
If IsPresent(...) Then Export_TDB_OTP(...)
 

VERHAEGHE Jean-Baptiste

XLDnaute Nouveau
Bonjour Iznogood1 et merci pour ta réponse,

Je pense que je ne suis vraiment pas doué car je n'arrive pas du tout à mettre en place cette solution même en arrangeant le code de différente manière.

La seule chose que j'ai réussi à faire c'est que mon TCD sélection à chaque fois le champ "vide" ("Blank") même quand il est sensé trouver une correspondance.
 

chris

XLDnaute Barbatruc
Bonjour

Alors que les segments existent pourquoi cette complication de passer par VBA ?

Edit : pas vu de filtre dans le code
 
Dernière édition:

chris

XLDnaute Barbatruc
Re

Oui c'est ce que j'étais en train de comprendre en relisant.

La source des TCD est où ?
 

chris

XLDnaute Barbatruc
re

Variables à vérifier
Code:
Dim r As Range, Matricule as String
  matricule=range("SATURN_AFFAIRES").text
  Set r =Worksheets("SPF").Range("AC:AC").Find(matricule)
  If Not r Is Nothing Then
    TDB_Periode = matricule
    Else
        MsgBox "inexistant"
    End If
 

VERHAEGHE Jean-Baptiste

XLDnaute Nouveau
Bonjour Chris, Iznogood1,

Merci beaucoup pour votre aide, je suis arrivé à mes fins en modifiant qqls paramètres.
Je vous souhaite une agréable fin de journée et qui sait, peut être a bientôt sur le forum.

JB

PS : comment je fais pour clôturer le sujet ?
 

Discussions similaires


Haut Bas