Formule marco

Bonjour je débute en macro (excel 2010) mais grâce à ce forum je progresse vite depuis hier.

J'ai par contre encore des questions sur les formules marcro et la syntaxe, en rapport avec un fichier d'une trentaine de colonnes et de 800 lignes sur des données RH. (type fonction, lieu de travail , nom, prénom, date de naissance etc...)

dans certaines cellules j'ai des erreurs que je voudrais corriger, pouvez vous me dire comment rédiger une macro :

1)- qd un résultat est présent dans une cellule dans colonne précise que cela recopie une partie de la ligne (pas toutes les colonnes de la ligne) dont fait partie la cellule initiale vers une nouvelle feuille de calcul?

par exemple si un salarié a 60 ans ou plus -> recopie son nom prénom age vers nouvelle feuille de calcul

2)-concernant le calcul de l'âge qd j'ai une cellule avec poste vide, cela donne =DATEDIF($M46;$M$1;"y") 119ans... comment le corriger? avez vous une idée pour que lorsque je calcule la moyenne d'âge automatiquement tous les 119ans ne soient pas pris en compte (bref comment neutraliser des lignes dans des formules qd une cellule de la ligne pose soucis)

3)comment rédiger une macro qui qd une cellule dans une ligne présente un résultat attendu, ce résultat puisse se recopier dans d'autres cellules de la même ligne? exemple un poste vide devrait donner un résultat "néant" à fonction/lieu/nom, prénom/date de naissance etc...

merci pour votre aide

Bonjour,

Toujours difficile de répondre de façon générique ... hors sol ....

Par contre, avec ce que tu décris ... il faut te dire qu'une macro est une automatisation d'une tâche répétitive ...

SI tu dois ausculter ta base de données et y apporter des corrections ... tu as intérêt à utiliser le Filtre ...

En espèrant que cela t'aide ...

Bonjour à tous,

Concernant ta question 2, Excel identifie les dates sous forme de nombres entiers (aussi appelés numéros de série), depuis le 01 Janvier 1900 (numéro de série 1) jusqu'au 31 Décembre 9999 (numéro de série 2958465). Une cellule vide est interprétée comme une valeur nulle équivalent à la pseudo-date 00/01/1900.

Voila qui explique la valeur 119, soit 2019 - 1900.

Pour éviter de prendre en compte les cellules vides, tu peux utiliser la fonction SI.

=SI($M46<>"";DATEDIF($M46;$M$1;"Y");"")

Ainsi, tu pourra utiliser la fonction MOYENNE, les cellules vides n'étant pas prises en compte par cette fonction.

Cordialement.

Merci je reformule comme je peux

je veux par rester hors sol

1) comment écrire dans ma macro (version excel 2010 pc) cette fonction :

pour l'appliquer à la colonne

bpef!$M1:bpef!$M999

=SI($M46<>"";DATEDIF($M46;$M$1;"Y");"")

sachant que je ne veux pas écraser l'opération précédente dans ma macro qui a déjà fait pas mal d'opérations

pour les autres questions en reprenant des codes excels, comment mettre en macro:

2)comment rédiger la macro suivante :

pour la colonne bpef!$G1:bpef!$G999 rechercher le mot "absent"

si "absent" trouvé dans une cellule par exemple la cellule bpef!G20-> cela recopie bpe!A20 et bpef!D20 (bref une partie de la ligne dont avec le résultat "absent" vers une nouvelle feuille de calcul? à créer automatiquent

3)comment rédiger la macro suivante :

pour la colonne bpef!$b1:bpef!$b999 rechercher le nombre "3"

si "3" trouvé dans une cellule par exemple dans la cellule bpef!b20-> cela recopie "3" automatiquement dans bpe!u20 et bpef!t20

Je ne veux pas de formules excel je dois l'avoir impérativement rédigé dans ma macro pour que toutes les tâches séquentielles répétitives se fassent automatiquement.

Suis je plus clair?

Pouvez vous m'éclairer sur ces trois points

encore merci pour votre aide précieuse

Re,

Je te conseille d' y aller ' piano ... marco ... franco ' ... ... donc une chose après l'autre ...

Surtout si tu veux apprendre ... et devenir autonome ...

Pour ta première question ... fais un test en lançant ton enregistreur de macros ...

Saisis ta formule dans une cellule ... et ensuite tu regardes et tu analyses la macro ...

Tu auras déjà un point de départ ...

mais j'ai déjà fait une macro qui fonctionne très bien jusqu'ici je te rassure

Sub etape1()

Sheets("base poste pour fichier Excel").Select

Sheets("base poste pour fichier Excel").Name = "bpfe"

Application.WindowState = xlMinimized

Application.WindowState = xlNormal

Dim maligne As String

For Each cell In Range("bpfe!A1:bpfe!A2000")

If cell.Interior.Color = RGB(153, 153, 153) Then

maligne = cell.Row

Rows(maligne).EntireRow.Delete

maligne = ""

End If

Next cell

Columns(18).Insert

Columns(14).Insert

Rows("1:1").RowHeight = 12.6

Range("M1").Select

ActiveCell.FormulaR1C1 = "=TODAY()"

Range("M2").Select

Range("N3").Select

ActiveCell.FormulaR1C1 = "=DATEDIF(RC13,R1C13,""y"")"

Range("N3").Select

Selection.AutoFill Destination:=Range("N3:N909"), Type:=xlFillDefault

Range("N3:N909").Select

Selection.NumberFormat = "0.00"

Selection.NumberFormat = "0.0"

Selection.NumberFormat = "0"

With Selection

.HorizontalAlignment = xlLeft

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

With Selection

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

Range("N2").Select

With Selection

.HorizontalAlignment = xlLeft

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

With Selection

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

Selection.FormulaR1C1 = "Age"

Range("S2").Select

With Selection

.HorizontalAlignment = xlLeft

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

With Selection

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

Selection.FormulaR1C1 = "Ancienneté poste"

Range("S3").Select

Selection.FormulaR1C1 = "=DATEDIF(RC18,R1C13,""y"")"

Selection.NumberFormat = "0"

With Selection

.HorizontalAlignment = xlLeft

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

With Selection

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

Selection.AutoFill Destination:=Range("S3:S909"), Type:=xlFillDefault

Range("S3:S909").Select

Range("L46,N:N,S:S").Select

Range("S1").Activate

Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _

Formula1:="=119"

Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority

With Selection.FormatConditions(1).Interior

.PatternColorIndex = xlAutomatic

.Color = 10498160

.TintAndShade = 0

End With

Selection.FormatConditions(1).StopIfTrue = False

Rows("2:2").Select

With Selection

.WrapText = True

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

With Selection

.VerticalAlignment = xlCenter

.WrapText = True

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

Columns("B:B").ColumnWidth = 7.78

Columns("C:C").ColumnWidth = 26.67

Columns("E:E").ColumnWidth = 4.44

Columns("F:F").ColumnWidth = 4.56

Columns("G:G").ColumnWidth = 4.33

Columns("H:H").ColumnWidth = 5.44

Columns("I:I").ColumnWidth = 8.33

Columns("L:L").ColumnWidth = 28.89

Columns("M:M").ColumnWidth = 10.22

Columns("N:N").ColumnWidth = 6.67

Columns("O:O").ColumnWidth = 5.11

Columns("Q:Q").ColumnWidth = 6.78

Columns("R:R").ColumnWidth = 11.44

Columns("S:S").ColumnWidth = 10.11

Range("A1").Select

Selection.FormulaR1C1 = "1"

Range("A1").Select

Selection.Copy

Range("E3:H923").Select

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _

SkipBlanks:=False, Transpose:=False

ActiveWindow.SmallScroll Down:=-402

Dim plage As Range

Set plage = [bpfe!i3:bpfe!i923]

For Each cell In plage

If IsEmpty(cell) Then cell.Value = "NORMAL"

Next

Set plage = [bpfe!K3:bpfe!K923]

For Each cell In plage

If IsEmpty(cell) Then cell.Value = "NA"

Next

Set plage = [bpfe!p3:bpfe!p923]

For Each cell In plage

If IsEmpty(cell) Then cell.Value = "NA"

Next

Set plage = [bpfe!T3:bpfe!T923]

For Each cell In plage

If IsEmpty(cell) Then cell.Value = "TEMPS PLEIN"

Next

Set plage = [bpfe!L3:bpfe!L923]

For Each cell In plage

If IsEmpty(cell) Then cell.Value = "NA"

Next

Set plage = [bpfe!q3:bpfe!q923]

For Each cell In plage

If IsEmpty(cell) Then cell.Value = "NA"

Next

Set plage = [bpfe!u3:bpfe!u923]

For Each cell In plage

If IsEmpty(cell) Then cell.Value = "VACANT"

Next

Set plage = [bpfe!O3:bpfe!O923]

For Each cell In plage

If IsEmpty(cell) Then cell.Value = "NA"

Next

Set plage = [bpfe!K3:bpfe!K923]

For Each cell In plage

If IsEmpty(cell) Then cell.Value = "NA"

Next

End Sub

j'apprends vite...

mais il me manque la fin de la macro à rédiger pour avoir un tableau final propre...

Il ne faut pas hésiter à utiliser les Balises Code ...

En Position 5 ... tu trouveras le symbole </>

Tout le monde t'en remerciera ...

les balises codes?

Je ne comprends pas

les balises codes?

Je ne comprends pas

balises code

Pour la mise à jour des formules, tu peux utiliser cette macro

Sub Màj()
    With Worksheets("bpfe")
        'Age
        .Range("N3").Formula = "=IF($M3<>"""",DATEDIF($M3,$M$1,""y""),"""")"
        .Range("N3").AutoFill Destination:=.Range("N3:N909"), Type:=xlFillDefault
        'Ancienneté
        .Range("S3").Formula = "=IF($R3<>"""",DATEDIF($R3,$M$1,""y""),"""")"
        .Range("S3").AutoFill Destination:=.Range("S3:S909"), Type:=xlFillDefault
    End With
End Sub

Cordialement.

Rechercher des sujets similaires à "formule marco"