Copier et incrémenter formule

laduche81

XLDnaute Junior
Bonjour!

Décidemment aujourd'hui il me pleut des problèmes sur vba...:(

Je cherche une commande qui me copie la formule présente en IX2 (formule assez complexe) et vient me l'adapter en IX16 par exemple.

Par exemple si dans la formule il y a le terme AA2 qu'il soit transformé en AA16, etc.

Est-ce possible?

Merci!

Adrien.
 

job75

XLDnaute Barbatruc
Re : Copier et incrémenter formule

Re,

Mon portable n'est pas libre...

Déjà j'ai regardé la macro du bouton, et ceci n'est pas bien bon :

liste = .Range("A2:A150" & DerLig).Value

écrire :

liste = .Range("A2:A" & DerLig).Value

A+
 

job75

XLDnaute Barbatruc
Re : Copier et incrémenter formule

Re,

Je suis enfin sous Excel 2010.

Je pense avoir compris le problème.

1) Dans la macro lol du bouton Modifier date, dans les cellules traitées, soit on entre une date, soit on entre une formule.

A priori je vois 2 formules en notation R1C1 :

- F1 pour la colonne IV

- F2 pour les autres colonnes.

2) Le code de la macro doit être modifié ainsi :

Code:
For l = LBound(liste) To UBound(liste)
    Select Case rev
    Case 1
        If Range("A2") = liste(l, 1) Then
          Sheets("database").Range("IV" & l + 1).Value = CDate(mdir)
        Else
          Sheets("database").Range("IV" & l + 1).FormulaR1C1 = F1 'notation R1C1
        End If
    Case 2
        If Range("A2") = liste(l, 1) Then
          Sheets("database").Range("IX" & l + 1).Value = CDate(mdir)
        Else
          Sheets("database").Range("IX" & l + 1).FormulaR1C1 = F2 'notation R1C1
        End If
    Case 3
        'etc...
3) Le vrai problème c'est de traduire en VBA les 2 formules pour obtenir F1 et F2.

C'est casse-pied sur une version française et je n'aurai pas le temps de faire ça ce soir.

Peut-être demain si j'en ai le courage et le temps, je ne garantis rien.

A+
 

job75

XLDnaute Barbatruc
Re : Copier et incrémenter formule

Re,

Je crois que le code que j'ai indiqué au 2) n'est pas correct.

Avant de modifier les dates, il faut probablement entrer les 2 formules F1 et F2 dans toutes les colonnes concernées.

On verra ça.

Edit : une petite question : quel pourra être le nombre maximum de lignes traitées ?

A+
 
Dernière édition:

laduche81

XLDnaute Junior
Re : Copier et incrémenter formule

Bonjour job et tout d'abord merci beaucoup pour le temps que vous consacrez à la résolution de mon problème!!

L'idée est en fait, si je reprends le code que vous m'avez indiqué en post #17, non pas de choisir entre la date et la formule, car quoi qu'il arrive la date doit venir s'insérer (en IV par exemple). Ce que j'aimerais, c'est si l'utilisater a fait ce choix-là (date en IV), une formule vienne s'écrire en IX (qui pourrait en être dépourvue par une ancienne modification) et ainsi continuer l'incrémentation (mois.décaler).

Mais cela ne change rien au fait que, comme vous me l'avez très justement dis, le vrai problème semble être de traduire la formule en langage VBA. Je comprendrais tout à fait que vous n'en n'ayes pas le temps, ni le courage, de mon coté je vais creuser la question et si j'arrive à un niveau de maturité assez avancé je vous montrerai ce qu'il en est.

Pour répondre à votre dernière question, le nombre maximum de lignes serait 300 environ pour être large (200 normalement devraient suffire).

P.S: pardon de ne répondre que maintenant, pour tout vous dire je suis stagiaire et je ne suis pas toujours devant le PC. Merci beaucoup en tout cas!
 

job75

XLDnaute Barbatruc
Re : Copier et incrémenter formule

Bonsoir laduche81,

J'ai pu convertir en VBA sans grande difficulté la formule F des colonnes IX IZ JB etc...

Et j'en ai profité pour modifier la macro lol en utilisant le filtre automatique :

Code:
With Worksheets("database")
    .AutoFilterMode = False
    Set filtre = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
    filtre.AutoFilter 1, [A2]
    On Error Resume Next 'si aucune valeur égale à A2
    Set filtre = filtre(2).Resize(filtre.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow
    .AutoFilterMode = False
    If Err Then MsgBox "A2 value not present in column A...": Exit Sub
    On Error GoTo 0
    Set zone = .Range("IV2,IX2,IZ2,JB2,JD2,JF2,JH2,JJ2,JL2,JN2,JP2,JR2,JT2,JV2,JX2,JZ2,KB2,KD2,KF2,KH2").EntireColumn
End With

F = "=IF(RC[-2]="""","""",IF(OR(AND(RC7=""Flex"",RC[39]<=MOIS.DECALER(RC[-2],parameters!R2C2)),AND(RC7=""OSW-Capacity"",RC[39]<=MOIS.DECALER(RC[-2],parameters!R3C2))),"""",SI(RC7=""Flex"",MOIS.DECALER(RC[-2],parameters!R2C2),SI(RC7=""OSW-Capacity"",MOIS.DECALER(RC[-2],parameters!R3C2)))))"

For i = rev + 1 To 20
    Intersect(filtre, zone.Areas(i)).FormulaR1C1 = F
Next
Intersect(filtre, zone.Areas(rev)) = CDate(mdir)

Application.Goto Intersect(zone.Areas(rev), filtre).EntireRow 'facultatif
Cela fonctionne bien, mais il y a un os.

La fonction MOIS.DECALER étant une fonction de l'Utilitaire d'analyse, VBA ne la reconnaît pas et met la valeur d'erreur #NOM?

Pour faire disparaître ces #NOM?, il faut revalider manuellement la 1ère cellule.

Je ne vois pas comment faire cela avec la macro.

Fichier joint.

A+
 

Pièces jointes

  • Classeurtest(1).xlsm
    268.1 KB · Affichages: 41
Dernière édition:

laduche81

XLDnaute Junior
Re : Copier et incrémenter formule

Bonjour et merci!!

Je n'arrive pas à enlever le #NOM?, Quelle cellule faut-il valider?

Savez-vous s'il y a une autre fonction qui donne le même résultat que mois.decaler et qui ne soit pas une fonction de l'utilitaire d'analyse?

Super pour le filtre merci pour l'amélioration!

Adrien

EDIT2: j'essaye avec DATE(YEAR("") , MONTH("")+decalageM , DAY(""))



EDIT: je viens de voir que la fonction mois.decaler s'écrivait EOMONTH en anglais. Je vais essayer de voir si ca marche. Testé --> renvoie FIN.MOIS, donc incorrect
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Copier et incrémenter formule

Bonjour laduche81, le forum,

J'ai trouvé comment faire revalider les cellules par la macro :

Code:
With Intersect(filtre, zone.Areas(i))
  .FormulaR1C1 = F
  .Replace "MOIS.DECALER", "µµ", LookAt:=xlPart 'pour revalider les cellules
  .Replace "µµ", "MOIS.DECALER"
End With
Deux précisions :

1) la formule F n'était pas correcte, j'avais oublié de figer ($) la colonne KK (je l'avais fait pour la colonne G)

2) à la fin de la macro on cadre sur la 1ère ligne filtrée (facultatif) :

Code:
Application.Goto filtre.Areas(1), True 'cadrage, facultatif
Fichier (2).

A+
 

Pièces jointes

  • Classeurtest(2).xlsm
    268.8 KB · Affichages: 38
  • Classeurtest(2).xlsm
    268.8 KB · Affichages: 42
  • Classeurtest(2).xlsm
    268.8 KB · Affichages: 34

laduche81

XLDnaute Junior
Re : Copier et incrémenter formule

Bonjour!

Merci ca marche à merveille!!

J'ai juste ajouté, en fin de code:
Sheets("macros").Select

Merci énormément job75 pour votre aide et surtout votre patience! C'est très gentil.

Je vous souhaite une bonne journée!

Adrien
 

job75

XLDnaute Barbatruc
Re : Copier et incrémenter formule

Re,

Non, pas avec ma méthode, puisque je rédéfinis un filtre sur la colonne A.

On pourrait éventuellement mémoriser le filtre en place au début, mais ce serait très lourd pour pas grand'chose.

A+
 

job75

XLDnaute Barbatruc
Re : Copier et incrémenter formule

Re,

Et si vous voulez toujours avoir le filtre en place sur les colonnes A:AH après exécution de la macro :

Code:
With Worksheets("database")
    .AutoFilterMode = False
    Set filtre = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
    filtre.Resize(, .[A:AH].Columns.Count).AutoFilter 1, [A2] 'filtre sur colonnes A:AH
    On Error Resume Next 'si aucune valeur égale à A2
    Set filtre = filtre(2).Resize(filtre.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow
    If Err Then MsgBox "A2 value not present in column A...": Exit Sub
    On Error GoTo 0
    Set zone = .Range("IV2,IX2,IZ2,JB2,JD2,JF2,JH2,JJ2,JL2,JN2,JP2,JR2,JT2,JV2,JX2,JZ2,KB2,KD2,KF2,KH2").EntireColumn
End With
Mais sur votre fichier seules les colonnes A G K sont visibles...

Fichier (3).

A+
 

Pièces jointes

  • Classeurtest(3).xlsm
    269 KB · Affichages: 32

Discussions similaires