Chercher deux colonnes pour modifier l'une en fct de l'autre
Bonjour tlmd,
Etant débutant en VBA je fais appel à votre expertise !
J'aimerai :
- Localiser les colonnes contenant dans la première ligne "etage" et "coef"
- Remplir toute la colonne coef en fonction des informations comprises dans la colonne "etage"
J'ai réussi à faire un code permettant de faire la deuxième partie mais l'insertion de nouvelle colonne va changer leur adresse.
C'est pourquoi je voudrais trouver un moyen (ultime) pour me localiser à chaque fois dans les bonnes colonnes.
Certainement avec une imbrication de boucles for qui vient chercher la première valeur puis la seconde et ensuite exécute le code suivants...
Sub coeff()
Dim i As Integer
With ThisWorkbook.Sheets("Feuil1")
For i = .Range("D" & .Rows.Count).End(xlUp).Row To 2 Step -1
If .Range("D" & i).Value = "RDC" Then
Range("F" & i).Value = "0"
End If
If .Range("D" & i).Value = "R+1" Then
Range("F" & i).Value = "1"
End If
If .Range("D" & i).Value = "R+2" Then
Range("F" & i).Value = "1.17"
End If
If .Range("D" & i).Value = "R+3" Then
Range("F" & i).Value = "1.34"
End If
If .Range("D" & i).Value = "R+4" Then
Range("F" & i).Value = "1.51"
End If
If .Range("D" & i).Value = "R+5" Then
Range("F" & i).Value = "1.68"
End If
If .Range("D" & i).Value = "Ssol" Then
Range("F" & i).Value = "1."
End If
Next i
End With
End SubMerci d'avance
Bonjour et bienvenue sur le forum
Un essai à tester. Te convient-il ?
Bye !
Bonsoir,
On ne met pas des macros standard n'importe où, et il convient de réserver les modules d'objets au rôle qui leur est dévolu.
Donc effacer tout le contenu du module ThisWorkbook qui n'a rien à faire là.
De toute façon, il est à remplacer en totalité :
Sub Coeff()
Dim E, cc, i%, ke%, kc%, n%, c%
With Worksheets("Feuil1")
Do While .Cells(1, i + 1) <> ""
i = i + 1
If .Cells(1, i) = "Et." Then
ke = IIf(ke = 0, i, ke)
ElseIf .Cells(1, i) = "Coef" Then
kc = IIf(kc = 0, i, kc)
End If
Loop
n = .Cells(.Rows.Count, ke).End(xlUp).Row
E = Split("RDC R+1 R+2 R+3 R+4 R+5 Ssol")
cc = Array(0, 1, 1.17, 1.34, 1.51, 1.68, 1)
Application.ScreenUpdating = False
For i = 2 To n
For c = 0 To UBound(E)
If .Cells(i, ke) = E(c) Then
.Cells(i, kc) = cc(c): Exit For
End If
Next c
Next i
End With
End SubA placer dans un module Standard.
A lancer directement ou affecter à un bouton...
Cordialement.
MERCI BEAUCOUP pour vos réponses/conseils (notamment MFerrand) !
Ca m'a été d'une très grande aide.
Avez-vous un livre à me conseiller sur la programmation vba sur excel ?
J'aimerais approfondir le sujet.
Encore merci,
Bonne soirée.