Verification VBa à partir d'une liste

Résolu
Bonjour,

Je souhaite vérifier la saisie des codes budgets (sans utiliser la validation des données) à partir de VBA. Ma liste est contenue dans une feuille appelée Listing Code et se trouve sur l'ensemble de la colonne A de cette feuille. Par ailleurs, j'ai défini ma colonne A comme étant "CodeBudget".
Ma feuille de suivi, "FOLLOW-UP" est l'endroit où mes commandes sont saisies et où les codes budgets sont renseignés selon la commande dans la colonnne F.

Aussi, j'ai commencé à écrire un code, mais mes connaissances sont limitées.
Quelqu'un aurait-il une piste à me suggérer ?
Je vous joins mon document :
http://cjoint.com/?0GxoszCAUzV
Mon code :
Option Explicit

Sub verif_code_budget()


Sheets("FOLLOW-UP").Range(Range("F4"), Range("F65000").End(xlUp)).Select
For Each cell In Selection


Do While cell.Value <> Sheets("Listing code").Range("A37").Value
'ici en fait je souhaiterais que la cell.value correspondant au moins à une valeur de ma liste "CodeBudget" du Listing code (colonne A)
' si ce n'est pas le cas, je veux proposer à l'utilisateur de rechanger cela à partir d'une liste déroulante proposant tous les codes budget (colonne A)

MsgBox "Erreur de saisie", vbCritical, "VERIFICATION SAISIE"

Loop
Next

End Sub


Merci de votre aide.

3 réponses

  1. Bonjour,

    Je sollicite de nouveau votre aide. Avez-vous des idées de solutions ?
    Merci
    1. Contributeur
      ca vient, ca vient...

      en fin de matinée, j'espère
      mais ce serait + pratique avec un extrait de ton classeur
      pour joindre une pièce
      mettre le classeur sans données confidentielles en pièce jointe sur
      https://www.cjoint.com/
      puis copier l'adresse du lien et la coller dans le message de réponse

      Dans l'attente
      1. J'avais pensé à la pièce jointe, c'est plus facile d'expliquer avec l'exemple concret ;)
        Merci à vous.
    2. Contributeur
      Bon j'ai bu mon caoua! :o)

      j'avoue ne pas comprebdre le coup de la liste de validation . pour ma part j'opterai plut^t pour un formulaire où on taperait le numéro de code... tu dis

      en attendant:
      Option Explicit
      
      Sub verif_code_budget()
      Dim Derlig As Integer, T_code
      Dim Liste As Range, cptr As Integer
      
      Application.ScreenUpdating = False
      
      With Sheets("FOLLOW-UP")
           Derlig = .Range("F65000").End(xlUp).Row
           T_code = Application.Transpose(.Range(.Cells(4, "F"), .Cells(Derlig, "F")).Value)
      End With
      With Sheets("Listing code")
           Derlig = .Range("A65000").End(xlUp).Row
           Set Liste = .Range(.Cells(2, "A"), .Cells(Derlig, "A"))
           For cptr = 1 To UBound(T_code)
                If Application.CountIf(Liste, T_code(cptr)) = 0 Then
                     MsgBox "Erreur de saisie: " & T_code(cptr) & " inconnu !", vbCritical, "VERIFICATION SAISIE"
                     Sheets("FOLLOW-UP").Cells(cptr + 3, "F").Select
                     'EN ATTENTE DECISION FORMULAIRE
                     Exit Sub
                End If
           Next
      End With
      
      End Sub


      1. Votre code fonctionne parfaitement bien.
        Merci !
        Je n'ai jamais fait usage de formulaire dans mes macros. Comment cela fonctionne-t-il ?
        J'aimerais bien en effet proposer une liste déroulante via un formulaire pour la modification du code une fois que l'erreur est repérée.
        Un ptit coup de pouce supplémentaire ?
        Je vais faire des recherches par moi même aussi. Merci.
      2. Contributeur
        OK, je te fais ça dans l'après-midi
      3. merci beaucoup.
        je commence à comprendre le fonctionnement des userform... faut que je m'y mette ! ^^
      4. Contributeur
        excuse le retard , les Canadairs qui passent sans arrêt depuis hier apres-midi perturbent tout le monde dans le coin -(sud 07)

        proposition:
        https://www.cjoint.com/?3Gyra6OyHIV

        Il serait peut-^tre + confortable pour l'utilisateur et + simple que la correction se fasse immédiatement à la fin d'une saisie dans la colonne F:il faudrait employer une procédure événementielle worksheet_change qui réagirait en cas d'erreur et ouvrirait l'userform
        ou encore mieux:
        avec un worksheet_selection_change, sur une cellule vide, l'userform serait automatiquement ouvert: choix +sûr et plus rapide que de saisir toute la désignation

        A toi de voir
      5. Contributeur
        ajouter à la dernière ligne de la macro module1 un msgbox "vérification terminée"