RESOLU - Macro qui ne veut pas soustraire la bonne colonne...

Melomie

XLDnaute Occasionnel
Bonjour à tous,

J'ai un souci avec une macro qui ne veut pas soustraire la bonne colonne...

Donc pour résumer,

j'ai dans une cellule :
=si(H2>F2;"";F2-H2)
qui me donne : "if(RC[-1]<RC[-3],"""",RC[-1])" en VBA

or je voudrais avoir:
=si(H2>F2;"";F2-I2)
en VBA = ???

que dois-je changer dans le langage VBA pour obtenir cette formule ? Ce doit être tout bête mais je n'y parviens pas,

Une fois de plus merci de votre aide !
 
Dernière édition:

Melomie

XLDnaute Occasionnel
Re : Macro qui ne veut pas soustraire la bonne colonne...

en effet je l'avais tronquée car sinon mon fichier était trop volumineux...

voici la macro "entière":

HTML:
Sub feuille1()
' test1a7 Macro
'
'pour créer une nouvelle feuille

    Sheets("RAWDATA BRUT").Select
    Sheets.Add
    Range("A1").Select
    
'étapes 1 à 7
' /!\ la feuille créée doit s'appeller "feuil1"

    Range("A1").Select
    Sheets("RAWDATA BRUT").Select
    Columns("K:K").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("A:A").Select
    ActiveSheet.Paste
        Range("A1").Select
        With Selection.Interior
        .ColorIndex = 33
        End With
    Sheets("RAWDATA BRUT").Select
    Columns("R:R").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("B:B").Select
    ActiveSheet.Paste
    Columns("B:B").EntireColumn.AutoFit
    Sheets("RAWDATA BRUT").Select
    Columns("X:X").Select
    
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("C:C").Select
    ActiveSheet.Paste
    Range("D1").Select
        With Selection.Interior
        .ColorIndex = 16
        End With
    ActiveCell.FormulaR1C1 = "Dénominateur"

    Range("D2").Select
    Columns("D:D").ColumnWidth = 12.14
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""","""",1000)"
    Range("D2").Select
    Selection.AutoFill Destination:=Range("D2:D1000")
    Range("D2:D1000").Select
    Range("E1").Select
    Sheets("RAWDATA BRUT").Select
    ActiveWindow.SmallScroll ToRight:=6
    Columns("X:X").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("E:E").Select
    ActiveSheet.Paste
    Range("F1").Select
        With Selection.Interior
        .ColorIndex = 44
        End With
    ActiveCell.FormulaR1C1 = "Quantité en cours 2"
        With ActiveCell.Characters(Start:=1, Length:=17).Font
        .Name = "Arial"
        End With
    Range("F2").Select
    Columns("F:F").EntireColumn.AutoFit
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]="""","""",RC[-3]/RC[-2])"
    Range("F2").Select
    Selection.AutoFill Destination:=Range("F2:F1000")
    Range("F2:F1000").Select
    Sheets("RAWDATA BRUT").Select
    Columns("W:W").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("G:G").Select
    ActiveSheet.Paste
    Range("G1").Select
        With Selection.Interior
        .ColorIndex = 44
        End With
    ActiveCell.FormulaR1C1 = "UQ1"
    Range("G2").Select
    
    
' étape 8: colonne stock
    
    Range("H1").Select
        With Selection.Interior
        .ColorIndex = 44
        End With
        With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = 1
        End With
    ActiveCell.FormulaR1C1 = "Stock"

    Range("H2").Select
    
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(C[-7],'P:\DOSSIER ELODIE BLANCHET\Macro 09.2011\[CCNV.xls]Feuil1'!R2C8:R1000C10,3)"
    Range("H2").Select
    Selection.AutoFill Destination:=Range("H2:H1000")
    Range("H2:H51").Select
    
'pour remplacer les #N/A par ""

        Columns("H:J").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("F9").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = ""
    Cells.Replace What:="#N/A", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
'colonne stock sans doublons
   
    Columns("I:I").Select
    Selection.Insert Shift:=xlToRight
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "Stock sans doublons"
    Range("I2").Select
    Columns("I:I").EntireColumn.AutoFit
    Range("I2").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]"
    Range("I3").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]=R[-1]C[-1],"""",RC[-1])"
    Selection.AutoFill Destination:=Range("I3:I10000")
    Range("I3:I51").Select
    Range("I3").Select
    
    
'pour remplacer les "" par des 0

    Columns("I:I").Select
    Selection.Find(What:="""""", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    Selection.Replace What:="""""", Replacement:="0", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        
'colonne RAP !!

    Range("J1").Select
    With Selection.Interior
        .ColorIndex = 44
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
    End With
    ActiveCell.FormulaR1C1 = "RAP"
    Range("J2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-2]>RC[-4],"""",RC[-4]-RC[-1])"
    Selection.AutoFill Destination:=Range("J2:J1000"), Type:=xlFillDefault
    Range("J2:J1000").Select

'étapes 10 à 12 : dates

    Sheets("RAWDATA BRUT").Select
    ActiveWindow.SmallScroll ToRight:=8
    Columns("AH:AH").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("J:J").Select
    ActiveSheet.Paste
    Range("J1").Select
        With Selection.Interior
        .ColorIndex = 16
        End With
        With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = 1
        End With
    ActiveCell.FormulaR1C1 = "Mois"
    Range("K2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""","""",MONTH(RC[-1]))"
    Range("K2").Select
    Selection.AutoFill Destination:=Range("K2:K1000")
    Range("K2:K1000").Select
    Range("L1").Select
        With Selection.Interior
        .ColorIndex = 16
        End With

    ActiveCell.FormulaR1C1 = "Semaine"

    Range("L2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-2]="""","""",WEEKNUM(RC[-2])-1)"
    Range("L2").Select
    Selection.AutoFill Destination:=Range("L2:L1000")
    Range("L2:L5000").Select
    Range("L7").Select
    

' étape 13: ajoute les colonnes F, I et J pour le TCD
    
    Range("A1").Select
    Sheets("RAWDATA BRUT").Select
    Columns("F:F").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("M:M").Select
    ActiveSheet.Paste
    
    Range("A1").Select
    Sheets("RAWDATA BRUT").Select
    Columns("I:I").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("N:N").Select
    ActiveSheet.Paste
    
    Range("A1").Select
    Sheets("RAWDATA BRUT").Select
    Columns("J:J").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("O:O").Select
    ActiveSheet.Paste
    Range("O1").Select
        With Selection.Interior
        .ColorIndex = 35
        End With
    
    Columns("O:O").EntireColumn.AutoFit
    
End Sub
 

Melomie

XLDnaute Occasionnel
Re : Macro qui ne veut pas soustraire la bonne colonne...

J'ai refait les dernières étapes (celles après la colonne RAP) à l'aide de l'enregistreur de macro et ça a l'air de fonctionner !

Je vais quand même vérifier les résultats mais ça a l'air correct !

Allez y comprendre qqch...
 

Melomie

XLDnaute Occasionnel
Re : Macro qui ne veut pas soustraire la bonne colonne...

C'est maintenant ma colonne stock qui ne fonctionne plus de nouveau...
Lorsque je mets un nouveau fichier avec de nouvelles données, dans mes stocks il me met la même valeur de partout....
Il y a vraiment de quoi devenir fou !!
 

pierrejean

XLDnaute Barbatruc
Re : Macro qui ne veut pas soustraire la bonne colonne...

Re

Desolée tu peux l'etre !!
rarement vu pire code
La partie fautive:

Code:
Sheets("RAWDATA BRUT").Select
    Columns("AH:AH").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("J:J").Select
    ActiveSheet.Paste
    Range("J1").Select
        With Selection.Interior
        .ColorIndex = 16
        End With
        With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = 1
        End With
    ActiveCell.FormulaR1C1 = "Mois"

Vois la copie de macro feuil1_b :
partie fautive entre Goto suite et suite :

Si tu ne peux vraiment pas corriger reviens
 

Pièces jointes

  • fichier pour forum_b.xls
    81 KB · Affichages: 42
  • fichier pour forum_b.xls
    81 KB · Affichages: 43
  • fichier pour forum_b.xls
    81 KB · Affichages: 42

Melomie

XLDnaute Occasionnel
Re : Macro qui ne veut pas soustraire la bonne colonne...

donc si j'ai bien compris la fin de ma macro devient:

HTML:
'colonne RAP !!

    Range("J1").Select
    With Selection.Interior
        .ColorIndex = 44
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
    End With
    ActiveCell.FormulaR1C1 = "RAP"
    Range("J2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-2]>RC[-4],"""",RC[-4]-RC[-1])"
    Selection.AutoFill Destination:=Range("J2:J1000"), Type:=xlFillDefault
    Range("J2:J1000").Select
    
'étapes 10 à 12 : dates
GoTo suite
    Sheets("RAWDATA BRUT").Select
    Columns("AH:AH").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("J:J").Select
    ActiveSheet.Paste
    Range("J1").Select
        With Selection.Interior
        .ColorIndex = 16
        End With
        With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = 1
        End With
    ActiveCell.FormulaR1C1 = "Mois"
suite:
    Range("K2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""","""",MONTH(RC[-1]))"
    Range("K2").Select
    Selection.AutoFill Destination:=Range("K2:K1000")
    Range("K2:K1000").Select
    Range("L1").Select
        With Selection.Interior
        .ColorIndex = 16
        End With

    ActiveCell.FormulaR1C1 = "Semaine"

    Range("L2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-2]="""","""",WEEKNUM(RC[-2])-1)"
    Range("L2").Select
    Selection.AutoFill Destination:=Range("L2:L1000")
    Range("L2:L5000").Select
    Range("L7").Select

' étape 13: ajoute les colonnes F, I et J pour le TCD
    
    Range("A1").Select
    Sheets("RAWDATA BRUT").Select
    Columns("F:F").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("M:M").Select
    ActiveSheet.Paste
    
    Range("A1").Select
    Sheets("RAWDATA BRUT").Select
    Columns("I:I").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("N:N").Select
    ActiveSheet.Paste
    
    Range("A1").Select
    Sheets("RAWDATA BRUT").Select
    Columns("J:J").Select
    Selection.Copy
    Sheets("Feuil1").Select
    Columns("O:O").Select
    ActiveSheet.Paste
    Range("O1").Select
        With Selection.Interior
        .ColorIndex = 35
        End With
    
    Columns("O:O").EntireColumn.AutoFit
    
End Sub

??

Si c'est bien ça, ça fonctionne presque, ya juste ma colonne date (K) qui ne fonctionne plus...

C'est dingue chaque fois qu'on solutionne un pbm, un autre se créé!!

et désolée mais je suis débutante en VBA... J'apprends par moi même... et j'ai beaucoup de mal à vrai dire !

merci de votre aide !
 

Melomie

XLDnaute Occasionnel
Re : Macro qui ne veut pas soustraire la bonne colonne...

Alors euh ça va être un peu compliqué à expliquer je pense!

En fait j'ai 2 fichiers de départ (2 extractions de SAP en rawdata brut). sur l'un d'eux je dois créer une nouvelle feuille avec toutes les colonnes qu'on a dit, c'est à dire:

- A: Article
- B: Poste
- C:Quantité en cours
- D:Dénominateur
- E:qté en unité de vente
- F: qté en cours 2 (=C/D)
- G:UQ1
- H:Stock (à aller chercher dans l'autre fichier)
- I:Stock sans doublons (idem H mais sans doublons)
- J:RAP (=F-I)
- K:date charg
- L:mois (=mois de la date K)
- M:semaine (semaine de la date K)
- N: grpe marc
- O:don. ordre
- P:donneur d'ordre

Lorsque je n'ai rien mis entre parenthèse c'est que la colonne correspond simplement à une colonne du rawdata à dupliquer.

Vous avez compris?


Merci de votre aide !
 

Melomie

XLDnaute Occasionnel
Re : Macro qui ne veut pas soustraire la bonne colonne...

Bonjour,

Je viens de tester votre code et ça fonctionne sauf la colonne stock (la rechercheV), et donc la colonne stock sans doublons et RAP ne fonctionnent pas non plus.

Je me suis permise d'ajouter mon bout de code de la rechercheV pour la colonne stock, stock sans doublons et RAP. Ça marche pour la colonne stock, mais je ne suis pas satisfaite de mon code pour la colonne stock sans doublons et RAP, où apparaissent bcp de #N/A et de vides, sans raison, mais je n'ai pas d'autres idées...

Voila mon code, ajouté au votre :

HTML:
Sub feuille1()
colarr = Array("A", "B", "C", "D", "E", "G", "K", "N", "O", "P")
coldep = Array("K", "R", "X", "AT", "Z", "Y", "AJ", "F", "I", "J")
Sheets.Add.Name = "Feuil1"
For n = LBound(coldep) To UBound(coldep)
  Sheets("RAWDATA BRUT").Range(coldep(n) & "1:" & coldep(n) & Sheets("RAWDATA BRUT").Range(coldep(n) & "65536").End(xlUp).Row).Copy Destination:=Sheets("Feuil1").Cells(1, colarr(n))
Next n
derlin = Sheets("RAWDATA BRUT").Range("A65536").End(xlUp).Row
Sheets("Feuil1").Range("F2:F" & derlin).FormulaLocal = "=C2/D2"
Sheets("Feuil1").Range("F1") = "qté en cours 2"
Sheets("Feuil1").Range("J2:J" & derlin).FormulaLocal = "=SI(H2>F2;"""";F2-I2)"
Sheets("Feuil1").Range("J1") = "RAP"
Sheets("Feuil1").Range("L2:L" & derlin).FormulaLocal = "=SI(K2="""";"""";MOIS(K2))"
Sheets("Feuil1").Range("L1") = "mois"
Sheets("Feuil1").Range("M2:M" & derlin).FormulaLocal = "=SI(K2="""";"""";weeknum(K2))"
Sheets("Feuil1").Range("M1") = "Semaine"
Sheets("Feuil1").Range("H1") = "Stock"
Sheets("Feuil1").Range("H2" & derlin).FormulaR1C1 = "SIERREUR(RECHERCHEV(A:A;'P:\DOSSIER ELODIE BLANCHET\Macro 09.2011\[CCNV.xls]Feuil1'!$H$2:$J$1000;3);"""")"
Sheets("Feuil1").Range("I1") = "Stock sans doublons"
Sheets("Feuil1").Range("I2").FormulaR1C1 = "=RC[-1]"
Sheets("Feuil1").Range("I3:I" & derlin).FormulaR1C1 = "=IF(RC[-1]=R[-1]C[-1],"""",RC[-1])"

'pour la recherchev (test):

    Range("H2").Select
    
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(C[-7],'P:\DOSSIER ELODIE BLANCHET\Macro 09.2011\[CCNV.xls]Feuil1'!R2C8:R1000C10,3)"
    Range("H2").Select
    Selection.AutoFill Destination:=Range("H2:H1000")
    Range("H2:H51").Select
    
'pour remplacer les #N/A par ""

        Columns("H:J").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("F9").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = ""
    Cells.Replace What:="#N/A", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
'pour remplacer les "" par des 0

    Columns("I:I").Select
    Selection.Replace What:="""""", Replacement:="0", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    
End Sub

;)
 

Melomie

XLDnaute Occasionnel
Re : Macro qui ne veut pas soustraire la bonne colonne...

(par contre je suis épatée de voir que dans votre code les formules sont les "mêmes" que dans Excel ! Une des seules choses qu'on m'avait dit pour débuter, était que les fonctions était différentes dans Excel ou en VBA ! (la RechercheV qui devient Vlookup par exemple...)

Il va falloir que j'étudie de plus près votre code qui me parait vraiment intéressant pour moi... ;)
 

pierrejean

XLDnaute Barbatruc
Re : Macro qui ne veut pas soustraire la bonne colonne...

Re

Je ne peux rien dire de votre ajout puisqu'il s'agit d'un recherche dans un fichier externe que je n'ai pas
Efectivement pour avoir dans une cellule une formule dans la langue regionale il suffit d'utiliser Formulalocal et non formula ou formularR1C1
 

Melomie

XLDnaute Occasionnel
Re : Macro qui ne veut pas soustraire la bonne colonne...

Merci pour l'info !

Si je vous donne un extrait du 2e fichier, vous pourriez m'aider ?

Vous trouverez en pièce jointe un extrait avec de fausses valeurs...

Le but est donc pour la colonne stock : de faire une rechercheV à partir du numéro d'article pour récupérer les valeurs "utilis. libre" (colonne Y du CCNV) et les mettre dans la colonne stock.

La colonne "stock sans doublons" doit reprendre les nombres de la colonne précédente mais sans mettre les doublons càd que plusieurs lignes correspondent à un même numéro d'article donc le stock va forcément se répéter autant de fois qu'apparait le numéro d'article. Le but est de ne le faire apparaitre qu'un seule fois par article...

et pour terminer, la colonne RAP est la différence entre la colonne F et la I (qté en cours 2 - stock sans doublons)



j'aurais une autre question: depuis ce matin, quand je fais les essais une fenêtre s'ouvre et me demande de mettre à jour les données de la colonne stock (en allant parcourir mon poste de travail) savez vous pourquoi? je dois chaque fois aller recherche mon CCNV pour qu'il me lâche les bask ! ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 338
Membres
103 191
dernier inscrit
camiux