Affecter une valeur à une cellule selon le résultat d'autres

Bonjour au forum,

Ce code me sert à affecter aux cellules H une valeur selon le résultat d'une concaténation de 4 autres cellules (D,E,F,G) :

Sub PhénoSheet()

Nb_colonne = 4 ' nb de colonne à droite
Nb_ligne = 1000 ' nb de lignes à traiter

For Each c In Range("D11:D" & Nb_ligne) ' définition de la première colonne des données à concaténer
concat = c.Value
For i = 1 To Nb_colonne
concat = concat & c.Offset(0, i)
Next
ligne = c.Row
Range("H" & ligne).Value = concat  ' colonne qui affichera le resultat (ici colonne H)

If Range("H" & ligne).Value = "++++" Then
        Range("H" & ligne).Value = "CcEe"
ElseIf Range("H" & ligne).Value = "----" Then
        Range("H" & ligne).Value = "Rh Null"
ElseIf Range("H" & ligne).Value = "+-+-" Then
        Range("H" & ligne).Value = "CCEE"
ElseIf Range("H" & ligne).Value = "+--+" Then
        Range("H" & ligne).Value = "CCee"
ElseIf Range("H" & ligne).Value = "+-++" Then
        Range("H" & ligne).Value = "CCEe"
ElseIf Range("H" & ligne).Value = "-+-+" Then
        Range("H" & ligne).Value = "ccee"
ElseIf Range("H" & ligne).Value = "-+++" Then
        Range("H" & ligne).Value = "ccEe"
ElseIf Range("H" & ligne).Value = "-++-" Then
        Range("H" & ligne).Value = "ccEE"
ElseIf Range("H" & ligne).Value = "+++-" Then
        Range("H" & ligne).Value = "CcEE"
ElseIf Range("H" & ligne).Value = "++-+" Then
        Range("H" & ligne).Value = "Ccee"
ElseIf Range("H" & ligne).Value = "" Then
        Range("H" & ligne).Value = ""

Else
        Exit Sub

End If

Next

End Sub

J'aimerais ajouter à ce code d'autres calculs :

  • Si dans les cellules des colonnes W ET X le résultat est "-" ET "-", alors écrire dans la cellule AD de la ligne correspondante "Fy(a-b-)"
  • Si dans la cellule de la colonne R le résultat est "-", alors écrire dans la cellule AD de la ligne correspondante "k-"
  • etc

Auriez-vous une idée pour un code propre (je précise que j'ai besoin que ce soit réalisé par VBA)... ?

Merci d'avance

bonjour

pour être propre et facile à modifier à l'avenir (c'est le pire avec VBA), je te propose mettre en Z55 (ou ailleurs dans une cellule libre ta formule du type

= SI( concaténation = cequetuveux ; toncalcul; cellulededestination)

ensuite, tu enregistre la macro :

  • copier Z55
  • cliquer la cellule de destination
  • collage spécial valeur
stoppe l'enregistreur

Quand le SI est vrai, ça met toncalcul dans cellulededestination, sinon, cette cellule reste inchangée.

Bonjour Jmb,

Merci pour ta réponse.

J'avais effectivement pensé à cette méthode, sans la tester, de peur que ça alourdisse fortement le fichier (j'ai environ 1000 lignes à traiter).

Je vais tout de même tester dès demain pour voir, et reviendrai pour un feed-back

Bonjour Jmb, le forum,

J'ai finalement opté pour ta solution, malgré des formules sur 2000 lignes, je n'ai que 20ko de plus plus sur le fichier

Merci pour cette astuce et conseil !

Excellente journée !

Rechercher des sujets similaires à "affecter valeur resultat"