Simplification de programme

Résolu/Fermé
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019 - 9 oct. 2017 à 15:45
 NoviceVBA2017 - 10 oct. 2017 à 15:00
Bonjour,

Je suis encore novice en programmation VBA et je rencontre un problème : mes procédures sont beaucoup trop longues à relire et j'aimerai les simplifier.

J'ai donc un tableau avec plusieurs colonnes.
Une partie de mon programme consiste à rechercher les noms des colonnes et à les retrier en fonction (l'ordre des colonnes changent, parfois il y a des colonnes en plus, parfois en moins, mais certaines colonnes sont toujours présentent : c'est celles-ci que je vais rechercher).

J'ai donc une liste de nom de colonne dans différentes variables, et j'utilise systématiquement cette portion de procédure :

Dim posDateMouvement As Integer
posDateMouvement = 1
Nomcolon = Sheets("Extraction").cells(1, posDateMouvement).Value
While Nomcolon <> "Date Mouvement"
posDateMouvement = posDateMouvement + 1
Nomcolon = Sheets("Extraction").cells(1, posDateMouvement).Value
Wend

Ici je recherche donc la colonne qui s'appel "Date Mouvement", mais je recopie cette procédure X fois avec des noms de colonnes différentes, et ça me fait au final presque 150 lignes de code.

Auriez-vous une piste pour raccourcir cette procédure svp?

Merci d'avance pour votre retour.

Bien cordialement,
Un novice en VBA

2 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 oct. 2017 à 16:11
Bonjour,

Utilisez une fonction pour la recherche

exemple:

Sub test()
    Nomcolon = "A"
    posDateMouvement = recherche_colonne(Nomcolon)
End Sub

Function recherche_colonne(Nomcolon)
    col = 1
    With Worksheets("feuil1")
       col = .Rows(1).Find("A", .Cells(1, col), , xlWhole).Column
    End With
    recherche_colonne = col
End Function
0
NoviceVBA2017
10 oct. 2017 à 15:00
Bonjour f894009,

Merci, c'est exactement ce que je recherchais.

Bien cordialement
0