Macro pour remplacer valeur dans une plage en fonction du titre de colonne
Bonjour,
Dans mon fichier j'ai une ligne par client avec par mois un nombre de trajet, l'idée serait de remplir les cases début et fin( colonnes F et G) qui seront les bornes de la plage ou seront remplacés les valeurs par la valeur en colonne H.
je pense à une macro pour que ca écrase les anciennes données et que je puisse faire la manip sur une ligne plusieurs fois.
j'espère être clair dans mon explication, je ne sais pas me servir des macros
d'avance merci
Cordialement
Salut,
Je ne suis pas certain d'avoir compris ta demande. Dans le fichier ci-joint, si tu modifies des données dans les colonnes F à H - pour autant qu'elles soient toutes renseignées - les mois correspondants des colonnes I à T prennent la valeur indiquée en colonne H.
Pour bien te montrer cela, les dernières modifications s'affichent en jaune.
Si tu indiques un mois plus éloigné en premier, un message d'erreur apparait.
Si ce n'est pas ce que tu attendais, tente d'expliquer mieux ta demande.
Cordialement.
Hello à tous,
Une variante :
Sub RemplacePeriode()
Dim bytFirstRow As Byte, bytColMonthStart As Byte, bytColMonthEnd As Byte
Dim lngLastRow&, lngTmpRow&
Dim strMonthStart$, strMonthEnd$
Dim Trouve As Range, PlageDeRecherche As Range
Dim intValeur%
bytFirstRow = 2 'ici premiere ligne des données
lngLastRow = Range("A" & Rows.Count).End(xlUp).Row 'Derniere ligne des données
Set PlageDeRecherche = Range("I" & (bytFirstRow - 1) & ":T" & (bytFirstRow - 1)) 'Plage des mois
For lngTmpRow = bytFirstRow To lngLastRow 'Boucle sur toutes les données
strMonthStart$ = Cells(lngTmpRow, "F") 'stock début de période
strMonthEnd$ = Cells(lngTmpRow, "G") 'stock fin de période
intValeur% = Cells(lngTmpRow, "H") 'stock nouvelle valeur
If Not strMonthStart$ = vbNullString And Not strMonthEnd$ = vbNullString Then 'si toutes les périodes sont renseignées
Set Trouve = PlageDeRecherche.Cells.Find(what:=strMonthStart$, LookAt:=xlWhole, LookIn:=xlValues) 'cherche le mois de debut
If Not Trouve Is Nothing Then bytColMonthStart = Trouve.Column Else bytColMonthStart = 0 'recupere colonne fin
Set Trouve = PlageDeRecherche.Cells.Find(what:=strMonthEnd$, LookAt:=xlWhole, LookIn:=xlValues) 'cherche le mois de fin
If Not Trouve Is Nothing Then bytColMonthEnd = Trouve.Column Else bytColMonthEnd = 0 'recupere colonne fin
If bytColMonthStart <> 0 And bytColMonthEnd <> 0 Then 'Test si tout est ok par sécu
Range(Cells(lngTmpRow, bytColMonthStart), Cells(lngTmpRow, bytColMonthEnd)).Value = intValeur% 'Remplace les valeurs
End If
End If
Next lngTmpRow
Set Trouve = Nothing
Set PlageDeRecherche = Nothing
End Sub
Bonjour Yvouille, Bonjour Rag02700,
Merci beaucoup c'est exactement ce que je cherchais !
J'ai une autre demande dans le même genre, pensez vous qu'à la place d'avoir une valeur qui remplace, avoir un pourcentage qui s'applique sur la valeur présente?
Encore merci pour votre retour rapide!
Cordialement
Salut Zymon,
Ce serait déjà bien que tu nous indiques laquelle des deux solutions te convient. Nous t'avons proposé deux trucs assez différents ; je présume que c'est soit l'un soit l'autre et non pas les deux.
Par rapport à la solution choisie, donne un exemple du calcul de % que tu souhaiterais obtenir et dis avec précision où il devrait se placer.
Amicalement.
Bonjour Yvouille,
Désolé pour mon retour tardif,
Je suis parti sur la solution de Rag, la tienne fonctionnait très bien aussi mais elle s'active tout de suite donc pour éviter une erreur je préfère activé avec un raccourci ctrl+ une fois que j'ai renseigné toutes mes modifications, mais j'ai repris l'idée de la liste déroulante pour les mois.
Pour l'idée avec les pourcentages ca serait le même fonctionnement simplement dans la case valeur si je mets 50% ainsi dans les mois sélectionnés mes valeurs sont divisé par 2
Cordialement