Code vba - correction de donnees d'un tableau

Toushusss

XLDnaute Nouveau
Bonjour; J'ai rentré un code qui me permet d'inserer des lignes dans un tableau ( entre la ligne de titre et la derniére ligne Total) sans définir à l'avance le nombre de ligne de mon tableau. Ce code est le suivant
Code:
ligne = .Range("B" & .Rows.Count).End(xlUp).Row
    Set Tot = .Range("b11:b" & ligne).Find("TOTAL")
    
    .Range("A" & Tot.Row).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("A" & Tot.Row) = TextBox1.Text 'saisie date dans col A
    
    .Range("B" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("B" & Tot.Row - 1) = "" 'blanc dans col B
    
    .Range("C" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("C" & Tot.Row - 1) = CDbl(TextBox2.Text) 'saisie du texte dans col C
    
    .Range("D" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("D" & Tot.Row - 1) = CDbl(TextBox3.Text) 'saisie du texte dans col D
    
    .Range("E" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("E" & Tot.Row - 1) = .Range("D" & Tot.Row - 1) / .Range("D6") 'calcul ratio col E
    
    .Range("F" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("F" & Tot.Row - 1) = .Range("D" & Tot.Row - 1) / .Range("C" & Tot.Row - 1) 'calcul ratio dans col F
    
    .Range("G" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    If TextBox8.Text = "" Then
    .Range("G" & Tot.Row - 1) = "N.C."
    Else
    .Range("G" & Tot.Row - 1) = CDbl(TextBox8.Text)  'saisie du texte dans col G
    End If
    
    .Range("H" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    If TextBox8.Text = "" Then
    .Range("H" & Tot.Row - 1) = ""
    Else
    .Range("H" & Tot.Row - 1) = .Range("D5") - .Range("G" & Tot.Row - 1) 'calcul difference dans col H
    End If
    
    .Range("L" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("L" & Tot.Row - 1) = .Range("M" & Tot.Row - 1).Offset(-1, 0) 'reprend cellule M dans col L
    
    .Range("M" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("M" & Tot.Row - 1) = CDbl(TextBox4.Text) 'saisie du texte dans col M
    
    .Range("N" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("N" & Tot.Row - 1) = .Range("M" & Tot.Row - 1) - .Range("L" & Tot.Row - 1) 'calcul conso hhp N
    
    .Range("O" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("O" & Tot.Row - 1) = .Range("P" & Tot.Row - 1).Offset(-1, 0) 'reprend cellule P dans col O
    
    .Range("P" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("P" & Tot.Row - 1) = CDbl(TextBox5.Text) 'saisie du texte dans col P
    
    .Range("Q" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("Q" & Tot.Row - 1) = .Range("P" & Tot.Row - 1) - .Range("O" & Tot.Row - 1) 'calcul conso hhc dans col Q
    
    .Range("R" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("R" & Tot.Row - 1) = "" 'blanc dans col R
    
    .Range("S" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
     If TextBox6.Text <> "" Then
    Range("S" & Tot.Row - 1) = TextBox4.Text
     Else
       .Range("S" & Tot.Row - 1) = TextBox6.Text
     End If
 
    
    .Range("T" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    If TextBox6.Text = "" Then
    Range("T" & Tot.Row - 1) = ""
    Else
    .Range("T" & Tot.Row - 1) = CDbl(TextBox6.Text) 'saisie du texte dans col T
    End If
    
    
    .Range("U" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("U" & Tot.Row - 1) = .Range("T" & Tot.Row - 1) - .Range("S" & Tot.Row - 1) 'calcul conso hep dans col U
    
    .Range("V" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    If TextBox7.Text <> "" Then
    Range("V" & Tot.Row - 1) = TextBox5.Text
     Else
       .Range("V" & Tot.Row - 1) = TextBox7.Text
     End If
 
    
    .Range("W" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    If TextBox7.Text = "" Then
    Range("W" & Tot.Row - 1) = ""
    Else
    .Range("W" & Tot.Row - 1) = CDbl(TextBox7.Text) 'saisie du texte dans col T
    End If
    
    .Range("X" & Tot.Row - 1).Insert Shift:=xlDown 'inserer ligne au dessus
    .Range("X" & Tot.Row - 1) = .Range("W" & Tot.Row - 1) - .Range("V" & Tot.Row - 1) 'calcul conso hec dans col X
    End If
Cependant si je me trompe sur une saisie, lorsque je corrige la cellule, les calculs ne s'actualisent pas. Quel code dois je rajouter pour que je puisse corriger ma ligne de saisie tout en conservant la fonctionnalité de mes formules.
 

Gael

XLDnaute Barbatruc
Re : Code vba - correction de donnees d'un tableau

Bonjour Toushusss, le forum,

Si tu veux conserver la fonctionnalité des formules, il faut tout simplement entrer des formules. Dans ton code, tu ne mets que des constantes dans les cellules, lorsque tu écris par exemple:
Code:
.Range("H" & Tot.Row - 1) = .Range("D5") - .Range("G" & Tot.Row - 1)
la cellule en colonne H va contenir le résultat mais pas la formule, il faudrait écrire pour cela:
Code:
.Range("H" & Tot.Row - 1).Formula = "=$D$5-$G" & Tot.Row - 1

Tu peux utiliser l'enregistreur de macro en entrant les formules sur une ligne type puis utiliser la macro générée pour t'aider dans les modifications de ton code.

L'enregistreur va générer:
Code:
Range("H9").Select
    ActiveCell.FormulaR1C1 = "=R5C4-RC7"

Tu peux soit utiliser le même code avec FormulaR1C1 où R=RAW et C=Column et le chiffre est l'équivalent du "$" R5C4 est identique à $D$5, soit comme dans le code que je t'ai proposé plus haut mettre Formula et une notation classique que personnellement je trouve plus claire mais les deux sont correctes.

Et si tu rencontres quelques soucis, renvoi le code modifié et nous t'aiderons à le finaliser.

@+

Gael
 

Toushusss

XLDnaute Nouveau
Re : Code vba - correction de donnees d'un tableau

Salut
Gael j'ai essayé de faire comme tu m'as dit et ça marche pour les calculs ou j'ai une cellule fixe et une cellule qui évolue par contre je n'arrive pas à transposer cette ligne
.Range("F" & Tot.Row - 1) = .Range("D" & Tot.Row - 1) / .Range("C" & Tot.Row - 1) 'calcul ratio dans col F
Pourrais tu m'aider merci.
 

Gael

XLDnaute Barbatruc
Re : Code vba - correction de donnees d'un tableau

Bonsoir Toushusss, le forum,

Essaye le code suivant:

VB:
.Range("F" & Tot.Row - 1).Formula = "=$D$" & Tot.Row - 1 & "/$C$" & Tot.Row - 1 'calcul ratio dans col F

@+

Gael
 

Toushusss

XLDnaute Nouveau
Re : Code vba - correction de donnees d'un tableau

Merci Gael ça marche nickel pour cette partie. Par contre maintenant j'ai un soucis sur cette Formule qui fait la somme des cellules précédentes
Code:
.Range("C" & Tot.Row - 1).Offset(1, 0) = Application.WorksheetFunction.Sum(Range("C9:C" & Tot.Row - 1)) 'somme de C9 jusqu'à la dernière cellule ajoutée

Le principe de correction que tu m'as donné s'applique t il à cette ligne de code ?

Merci par avance
 

Gael

XLDnaute Barbatruc
Re : Code vba - correction de donnees d'un tableau

Bonsoir Toushusss, le forum,

C'est toujours le même principe et cela donne:

VB:
.Range("C" & Tot.Row).Formula = "=SUM($C$9:$C" & Tot.Row - 1 & ")"

A noter:
Code:
Range("C" & Tot.Row - 1).Offset(1, 0)
est équivalent à
Code:
Range("C" & Tot.Row)

Puisque tu enlèves une ligne avec le "-1" que tu rajoutes ensuite avec "Offset(1, 0)"

@+

Gael
 

Statistiques des forums

Discussions
312 236
Messages
2 086 479
Membres
103 232
dernier inscrit
logan035