Macro si(et

Bonjour,

comment ecrire en VBA cette formule :

dans la feuille qui s appelle "PIE", pour i=46 a 137

si(et(QKi<>"";NBCAR(Ci)=1;droite(Di;1)="1"); alors ecrire dans CMi => "SP" et dans CNi => QKi ; sinon rien)

(la colonne D est en format texte d ou le "1")

j ai crée une formule personnalisée qui marche, ca je sais faire, mais en fait apres reflexion, je ne veut pas de formule dans les colonnes CM et CN, je voudrais que ca se fasse tout seul, car ca arrive que mes collegues effacent mes formules par erreur....

Merci a vous (je debute a peine, je suis a la lecon 2.1 du tuto cours de VBA !!!)

Flore

Bonjour,

je pense qu'un, fichier de ta part s'impose

et un éclaircissement ... quand tu dis que tu ne veux pas de formule dans les cases, cela veut dire que tu souhaites que la macro donne le résultat, c'est cela ? et en cas de changement des conditions, doit-on réactualiser le résultat automatiquement ?

Bonjour Steelson,

je joins un fichier pour etre plus claire. j ai aussi complété ma demande initiale avec la variante "LP" et une MFC.

la MFC je saurais la faire ensuite, pas necessaire qu elle soit en macro (mais je suis preneur quand meme pour voir comment ca s ecrit)

Je ne veux pas que la macro tourne en permanence et ralentisse le classeur.

merci de ton aide

flor

3macro-si-et.xlsx (12.19 Ko)

une precision, mes colonnes QF,QG,QH j en ai besoin pour autre chose, donc dans tous les cas je dois garder les calcules de ces colonnes.

Bonjour,

Dans ton post 1, tu demande des tests sur la colonne "QK" mais dans ton fichier elle ne contient rien

Est-ce normal ?

Oui j ai un petit peu modifié la structure du fichier entre temps, bien prendre le fichier comme exemple.

merci

Avec ceci, les formules se régénèrent toutes seules !

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Union(Columns("C"), Columns("D"), Columns("F"), Columns("CM"), Columns("CN"))) Is Nothing Then
    Application.EnableEvents = False
    For Each cel In Intersect(Target, Union(Columns("C"), Columns("D"), Columns("F"), Columns("CM"), Columns("CN")))
        Range("CM" & cel.Row).FormulaR1C1 = "=IF(AND(LEN(RC[-88])=1,RC[-87]=""1""),""LP"",IF(RC[359]<>"""",""SP"",""""))"
        Range("CN" & cel.Row).FormulaR1C1 = "=IF(RC[-1]=""SP"",RC[358],"""")"
    Next
    Application.EnableEvents = True
End If
End Sub
2macro-si-et.xlsm (18.62 Ko)

Re,

Si j'ai bien compris, pas de formule

5floreli-macro.xlsm (19.01 Ko)

Merci a vous 2, les 2 propositions me vont très bien. Je vais étudier ces 2 codes pour continuer mon apprentissage du VBA !! mais le chemin risque d est long encore !!!!

merci encore a vous et bonne fin de journée

J'aurais pu (dû) faire plus simple encore :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Union(Columns("CM"), Columns("CN"))) Is Nothing Then
    Application.EnableEvents = False
    For Each cel In Intersect(Target, Union(Columns("CM"), Columns("CN")))
        Range("CM" & cel.Row).FormulaR1C1 = "=IF(AND(LEN(RC[-88])=1,RC[-87]=""1""),""LP"",IF(RC[359]<>"""",""SP"",""""))"
        Range("CN" & cel.Row).FormulaR1C1 = "=IF(RC[-1]=""SP"",RC[358],"""")"
    Next
    Application.EnableEvents = True
End If
End Sub

Si les macros sont activées, toute tentative de modifier la formule (supprimer, mettre un texte) est vouée à l'échec

Rechercher des sujets similaires à "macro"