Recopie de formule

Wily

XLDnaute Junior
Bonjour

Il m’arrive souvent d’avoir à faire une recopie d’une formule dans une même colonne, sur plusieurs cellules, mais qui ne sont pas à la suite
Pour y arriver, soit je recopie la formule cellule après cellule, soit j’utilise la touche Control pour pointer toutes les cellules.
Mais si les cellules sont très espacées, c’est très vite laborieux et pas sans risque d’erreur !
Je me demande si avec une macro, on pourrait pas faire cette tache ?

Merci
 

Pièces jointes

  • Recopie formule.xlsx
    8.9 KB · Affichages: 68

VDAVID

XLDnaute Impliqué
Re : Recopie de formule

Bonjour Willy,
Dans ton exemple les cellules espacées le sont toutes avec des cellules vides. Si c'est le cas pourquoi ne pa sélectionner la colonne "D" et Edition>Rechercher>Remplacer En mettant "+" dans la valeur à chercher et "*" dans la valeur à remplacer?

Si les cellules qui séparent celles que tu veux remplacer ne sont pas vides, alors tu devras faire attention au fait qu'il y'ait d'autres cellules avec un "+" dans leur formule que tu ne voudrais pas modifier.

Si tu veux absolument le faire par macro, il faudrait un exemple plus précis avec un critère de sélection pour remplacer le "+" par le "*" dans la colonne "D".

En espérant t'avoir aidé,
 

Wily

XLDnaute Junior
Re : Recopie de formule

Bonjour

Je n’ai pas trop bien compris ce que tu me disais de faire
Mais non les autres cellules ne sont pas forcément vides
Ce n’est qu’un exemple

J’ai refait cet exemple pour que cela soit plus parlant

Oui, c’est bien une macro que je souhaiterais obtenir
Car l’exemple ne fait que quelques lignes
Mais certains tableaux font plusieurs centaines de lignes

Merci
 

Pièces jointes

  • Recopie formule 2.xlsx
    10.8 KB · Affichages: 35

Staple1600

XLDnaute Barbatruc
Re : Recopie de formule

Bonsoir à tous


Comme j'ai fait cet exemple avant de voir le fichier joint, je poste mon exemple
VB:
Sub a()
'DEBUT:lignes de code pour exemple
Dim i&
For i = 1 To 20
Cells(i, 1) = IIf(i Mod 5 = 0, Cells(i, 1).Row, vbNullString)
Next i
'FIN:lignes de code pour exemple
'----------------------------------
'Ci-dessous code que tu pourrais adapter
'Fonction: Insérer des formules que dans les cellules adjacentes
'aux cellules non-vides de la colonne A
Range("A1:A20").SpecialCells(xlCellTypeConstants, 23).Offset(, 1).FormulaR1C1 = "=RC[-1]*ROW()"
End Sub

Wily:
Si tu as des questions, n'hésites pas

PS: Il faudra adapter:
Remplacer "=RC[-1]*ROW()" par la formule que tu souhaites copier.
 
Dernière édition:

Wily

XLDnaute Junior
Re : Recopie de formule

Bonsoir

Merci pour cette aide

J’ai intégré la macro dans mon fichier
J’ai fait quelques modifications, car les formules ne sont pas dans la colonne A, mais dans la colonne D
Mais je ne comprends pas la macro ?
Et je suis un peu étonné
Je ne vois que la formule qui est censée être recopiée, mais pas la cellule qui est censée être écrasée ?

Je ne sais pas comment écrire la macro, mais je voyais cela un peu comme ça
1) Je la lance la macro
2) Je sélectionne la colonne où se passera cette recopie
3) Je sélectionne la cellule qui contient la formule qui devra être recopiée
4) Je sélectionne une des cellules qui contient la formule qui devra être remplacée
5) Je valide

Soit dans l’exemple joint
Je lance la macro
Je clique sur la colonne D
Je clique sur la cellule D1
Je clique sur la cellule D 6 ou D13 ou D20 …..
Je valide
La formule D1, est recopiée dans les cellules D6, D13 et D20.
 

Staple1600

XLDnaute Barbatruc
Re : Recopie de formule

Bonsoir

Mon exemple précédent n'est qu'illustratif et relatif à :
'Ci-dessous code que tu pourrais adapter
'Fonction: Insérer des formules que dans les cellules adjacentes
'aux cellules non-vides de la colonne A

EDITION: Après relecture de ton fil, nouvelle proposition
Testes la macro, ci-dessous, toujours sur une feuille vierge d'un nouveau classeur
VB:
Sub b()
'//////////////////////////////////////////
Columns("A:D").Clear
With Range("A1:C20")
    .FormulaArray = "=COLUMN()/3*ROW()"
    .Value = .Value
    .NumberFormat = "0.00"
End With
[D1].FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
'///////////FIN CREATION DONNEES TEST ////

'Déclarations
Dim F$, x As Range, a
F = [D1].FormulaR1C1 'Ici cellule contenant la formule à copier
On Error Resume Next
Set x = Application.InputBox("Séléctionner les cellules en colonne D, devant recevoir la formule", , , , , , , 8)
On Error GoTo 0
If x Is Nothing Then
    MsgBox "Test annulé!"
    Exit Sub
End If
a = Split(x.Address, ";")
For i = LBound(a) To UBound(a)
    With Range(a(i))
        .Formula = F
        .Font.Bold = True
        .Borders.LineStyle = 1
        .Interior.ColorIndex = 6
    End With
Next i
End Sub

Quand l'inputBox s'affiche, sélectionnes en colonne D en utilisant la touche contrôle, et dis-moi si c'est le résultat est proche de ce que tu veux faire ? (Voir copie d'écran ci-dessous, cliquer dessus pour voir en taille réelle)
test1.png
 

Pièces jointes

  • test1.png
    test1.png
    19.7 KB · Affichages: 76
  • test1.png
    test1.png
    19.7 KB · Affichages: 76
Dernière édition:

Wily

XLDnaute Junior
Re : Recopie de formule

Bonjour

Merci pour ce nouveau développement
Merci aussi pour tes explications claires, la présentation et ton impression d’écran

Mais je croix que je me suis peut-être pas bien expliqué dans ma demande
Peut-être aussi que ce n’est pas possible ??

Mais ce que j’aurais souhaité, c’est en cliquant sur une cellule qui contient une formule (Et qui n’est donc pas vide)
Ex : « =A1+B1 », toutes les cellules de formules identiques (Sauf bien sur les N° de lignes) dans cette même colonne
Ex Colonne C : « =A9+B9 », « =A15+B15 », « =A24+B24 »

Ce qui aurait pour effet si la formule de remplacement est « A1*B1 »
Les formules : « =A9+B9 », « =A15+B15 », « =A24+B24 »
Deviennent : « =A9*B9 », « =A15*B15 », « =A24*B24 »

Une petite explication :
Que veux dire « R1C1 » dans
FormulaR1C1

Hors sujet : sur quoi travailles-tu pour écrire tes macros
Je vois que tous les textes entre guillemets sont en rouge ?

Merci
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Recopie de formule

Bonjour Wily,

Un essai dans le fichier joint.

  • Un premier clique sur le bouton permet de choisir la cellule dont la formule est à modifier.
  • On modifie la formule de la cellule sélectionnée. On valide la nouvelle formule avec la touche "Entrée"
  • Un second clique sur le bouton permet de modifier les formules semblables de la colonne D.

Le code est dans le module de code de la feuille "Feuil1"

VB:
Option Explicit
Public CelluleBase As Range
Public FormuleBase As String
Public FormuleLocal As String

Sub ChangeFormula()
Dim FinCell As Range, xCell As Range, Parformule As String

If CelluleBase Is Nothing Then
  Set CelluleBase = Nothing
  On Error Resume Next
  Set CelluleBase = Application.InputBox("Sélectionnez la cellule dont vous voulez-modifiez la formule", _
    Type:=8)
    
  If Err.Number <> 0 Then
    MsgBox "Erreur: " & Err.Description & " => FIN"
    Set CelluleBase = Nothing:    QuoiFaire.Caption = "Choisir la formule..."
    Exit Sub
  End If
  If CelluleBase Is Nothing Then
    MsgBox "Aucune cellule sélectionnée => FIN"
    Set CelluleBase = Nothing:    QuoiFaire.Caption = "Choisir la formule..."
    Exit Sub
  End If
  
  If CelluleBase.Count <> 1 Then
    MsgBox "Plus d'une cellule sélectionnée => FIN"
    Set CelluleBase = Nothing:    QuoiFaire.Caption = "Choisir la formule..."
    Exit Sub
  End If
    
  If CelluleBase.Column <> Columns("d").Column Then
    MsgBox "Cellule non élément dela colonne D => FIN"
    Set CelluleBase = Nothing:    QuoiFaire.Caption = "Choisir la formule..."
    Exit Sub
  End If
  
  FormuleBase = CelluleBase.FormulaR1C1
  FormuleLocal = CelluleBase.FormulaLocal
  MsgBox "Veuillez modifier la formule de la cellule " & CelluleBase.Address(False, False) & _
    vbLf & "de formule: " & CelluleBase.FormulaLocal
    QuoiFaire.Caption = "Modifier les cellules semblables..."
  CelluleBase.Select
  
Else
  Parformule = CelluleBase.FormulaR1C1
  
  If MsgBox("Vous allez modifier les formules de la colonne D" & vbLf & _
    "les formules telles que " & FormuleLocal & vbLf & _
    "seront remplacées par " & CelluleBase.FormulaLocal & vbLf & _
    "Voulez-vous continuer ?", vbExclamation + vbYesNo + vbDefaultButton2) <> vbYes Then
    Set CelluleBase = Nothing:    QuoiFaire.Caption = "Choisir la formule..."
    Exit Sub
  End If
 
  Set FinCell = _
          Columns("d").Find(What:="*", _
          After:=Columns("d").Cells(1), _
          LookIn:=xlFormulas, _
          LookAt:=xlWhole, _
          SearchOrder:=xlByRows, _
          SearchDirection:=xlPrevious)
  If FinCell Is Nothing Then
    MsgBox "pas cellule avec formule => FIN"
    Set CelluleBase = Nothing:    QuoiFaire.Caption = "Choisir la formule..."
    Exit Sub
  End If
  
  For Each xCell In Range(Cells(1, "d"), FinCell)
    If xCell.FormulaR1C1 = FormuleBase Then xCell.FormulaR1C1 = CelluleBase.FormulaR1C1
  Next xCell
    Set CelluleBase = Nothing
    QuoiFaire.Caption = "Choisir la formule..."
End If



End Sub

Private Sub QuoiFaire_Click()
ChangeFormula
End Sub
 

Pièces jointes

  • Modifier formules dans colonne v1.xlsm
    28 KB · Affichages: 41
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Recopie de formule

Bonjour à tous

Une petite explication :
Que veux dire « R1C1 » dans FormulaR1C1
R pour Row et C pour Column
Row =ligne et Column = Colonne
Tu auras des infos plus détaillées en appuyant sur la touche F1 quand tu es dans l'Editeur VBE
(Pour y aller faire ALT+F11)

Hors sujet : sur quoi travailles-tu pour écrire tes macros
Je vois que tous les textes entre guillemets sont en rouge ?
Regardes ce qui est écrit dans ma signature, c'est l'emplo de ces balises qui permet de formater les codes VBA dans les messages du forum
Merci
 
Dernière édition:

Wily

XLDnaute Junior
Re : Recopie de formule

Bonsoir Mapomme

Merci c'est exactement ce que je souhaitais

La 1ère solution est déjà très bien

La 2ème encore plus simple

C'est parfait
Cela devrait me simplifier grandement ce genre de recopie
et éviter pal mal d'erreur

Merci
 

Wily

XLDnaute Junior
Re : Recopie de formule

Bonsoir Staple1600

Merci à nouveau pour ces explications

Évidement R1C1 R pour Row et C pour Column

Ce qui est un peu déroutant dans VBA, pour un débutant
c'est la façon d’écrire la localisation
Parfois R1C1
Parfois tout simplement "A1"
Parfois ",1)" pour la colonne
La syntaxe semble différente suivant les commandes
Sans doute y a t-il une logique que je n'ai pas encore perçue !

Merci pour la balise, je l'utiliserai à l'avenir
Cela donne effectivement plus de clarté
Dommage que l'on ne puisse pas avoir la même chose sur VBA

A plus
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
856

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 425
Membres
103 206
dernier inscrit
diambote