[VBA] Problème de code
Bonjour à tous,
Je suis novice en programmation, et malgré de nombreuses prises d'informations et de recherches, je galère toujours ...
Je dois ici faire un code VBA pour automatiser une procédure. Cette procédure réalise différents actions comme celle-ci :
Filtrer la colonne G sur ACHAT, RESPONSABLE ACHATS. Modifier ensuite l'intitulé de la colonne L et de la colonne M en ACHAT.
Je pensais donc réaliser une boucle qui va chercher l'information demandée en colonne G et qui écrit dans les cellules sur la même ligne en colonne L et M, ACHAT (style While en colonne G est écrit ACHAT et RESPONSABLE ACHAT, écrire dans la colonne L, ACHAT, et dans la colonne M, ACHAT). Malheureusement, mes connaissances sont faibles et je ne sais pas vraiment comment en arriver la.
C'est pourquoi je me tourne vers vous pour me donner quelques pistes pour que je puisse réaliser ce code.
Si vous souhaitez plus d'informations pour manque de clarté, n'hésitez pas à me demander.
En vous remerciant par avance.
Bonjour Max, bonjour le forum,
Peut-être comme ça (nom de l'onglet à adapter), si ton tableau commence en A1 sans ligne ou colonne entièrement vide entre les données :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Variant 'déclare la variable I (Incrément)
Dim K As Variant 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter a ton cas)
TV = O.Range("A1").CurrentRegion 'définit le tableau de valeurs TV
ReDim TL(1 To UBound(TV, 1), 1 To 2) 'redimensionne le tableau des lignes TL (autant de lignes que TV, 2 colonnes)
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes du tableau des valeurs TV
'condition : si la donnée ligne I colonne 7 (=G) est églale à "ACHAT" ou à "RESPOSABLE ACHATS" (sans se soucier de la casse)
If UCase(TV(I, 7)) = "ACHAT" Or UCase(TV(I, 7)) = "RESPONSABLE ACHATS" Then
TL(I, 1) = "ACHAT" 'définit la donnée ligne I colonne 1 de TL : "ACHAT"
TL(I, 2) = "ACHAT" 'définit la donnée ligne I colonne 2 de TL : "ACHAT"
Else 'sinon
TL(I, 1) = TV(I, 12) 'définit la donnée ligne I colonne 1 de TL : la valeur qui existait avant la macro
TL(I, 2) = TV(I, 13) 'définit la donnée ligne I colonne 2 de TL : la valeur qui existait avant la macro
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
O.Range("L1").Resize(UBound(TV, 1), 2) = TL 'renvoie dans L1 redimensionnée le tableau TL
End SubSinon, il faudra songer à fournie un fichier !...
ThauThème,
Ce code fonctionne à merveille, je vais tâcher de l'adapter moi même aux autres lignes de la procédure.
En tout cas, merci pour ta réactivité, ton aide et tes explications sur le code si précieuses.
Re,
J'ai oublié de supprimer la déclaration de la variable K qui ne sert pas !...