• Initiateur de la discussion Initiateur de la discussion Manu62
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Manu62

XLDnaute Impliqué
bonjour

j'ai 2 formules que je souhaite "copier / coller" dans une cellule.
les 2 formules sont différentes et en fonction de la cellule, soit je prend la formule 1 ou alors la 2.

je recherche via un bouton, le code qui me permet de :
si je suis en cellule a10, de me recopie la formule qui se trouve en a1
ou alors la formule qui se trouve en a2.

deux boutons form 1 et form 2 ira très bien.

merci d'avance

manu
 
Re : copie de cellule

Bonjour Manu62, le forum,

Voyez le fichier joint et cette unique macro affectée aux boutons :

Code:
Sub Formule()
If IsError(Application.Caller) Or Not Intersect(ActiveCell, [A1:A2]) Is Nothing Then Exit Sub
ActiveCell = IIf(ActiveSheet.DrawingObjects(Application.Caller).Text = "form 1", [A1], [A2]).Formula
End Sub
Bonne journée.
 

Pièces jointes

Re : copie de cellule

Bonjour Manu,

avec ce code:
Code:
Sub Copie_Formule()
If ActiveCell.Address = "$A$10" Then
    Range("A1").Copy
    Selection.PasteSpecial Paste:=xlPasteFormulas
Else
    Range("A2").Copy
    Selection.PasteSpecial Paste:=xlPasteFormulas
End If
Application.CutCopyMode = False
End Sub

à+
Philippe

Edit: Bonjour Job
 
Re : copie de cellule

Re, bonjour Philippe,

Fichier (2) avec un nombre quelconque de boutons :

Code:
Sub Formule()
If IsError(Application.Caller) Or Not Intersect(ActiveCell, [A1:A5]) Is Nothing Then Exit Sub
ActiveCell = Cells(Split(ActiveSheet.DrawingObjects(Application.Caller).Text)(1), 1).Formula
End Sub
A+
 

Pièces jointes

Re : copie de cellule

salut

pour 2 formules, un bouton bascule pourrait faire l'affaire.
VB:
Private Sub ToggleButton1_Click()
 ToggleButton1.Caption = IIf(ToggleButton1.Caption = "copie de F1", "copie de F2", "copie de F1")
 [A10].FormulaLocal = IIf(ToggleButton1, [A2].FormulaLocal, [A1].FormulaLocal)
 'avec un peu de couleur
  [A10].Interior.Color = IIf(ToggleButton1, [A2].Interior.Color, [A1].Interior.Color)
End Sub
 

Pièces jointes

Re : copie de cellule

Re Manu62, salut Si...,

On ne peut pas dire que vous vous donnez du mal pour adapter les solutions qu'on vous donne.

Ma solution du post #2 devient donc :

Code:
Sub Formule()
If IsError(Application.Caller) Or Not Intersect(ActiveCell, [E1:E2]) Is Nothing Then Exit Sub
ActiveCell = IIf(ActiveSheet.DrawingObjects(Application.Caller).Text = "formule 1", [E1], [E2]).FormulaR1C1
End Sub
Fichier joint.

A+
 

Pièces jointes

Re : copie de cellule

bonjour,
J'ai ajouté un $ devant ma cellule. du coup ma formule fonctionne plus ! (SI(ESTNA(RECHERCHEV($D1;TABLEAU;2;FAUX()));0;RECHERCHEV($D1;TABLEAU;2;FAUX()))

le resultat devient
SI(ESTNA(RECHERCHEV(RC4;TABLEAU;2;FAUX()));0;RECHERCHEV(RC4;TABLEAU;2;FAUX()))
au lieu de
SI(ESTNA(RECHERCHEV($D17;TABLEAU;2;FAUX()));0;RECHERCHEV($D17;TABLEAU;2;FAUX()))

Avez vous une idée

Merci d'avance !

Manu
 
Re : copie de cellule

Re,

Vous vous fatiguez pour pas grand-chose Manu62.

Vous devriez savoir qu'ici l'utilisation de boutons/formules n'est pas la panacée.

Une solution très classique avec une macro évènementielle :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, v As Variant
With [numero] 'nom défini
  Set r = Intersect(Target, .Offset(1).Resize(Rows.Count - .Row), Me.UsedRange)
End With
If r Is Nothing Then Exit Sub
For Each r In r 'si entrées multiples
  v = Application.VLookup(r, [TABLEAU], 2, 0)
  If IsError(v) Then v = Application.VLookup(r, [TABLEAU2], 2, 0)
  r(, 2) = IIf(IsError(v), "", v)
Next
End Sub
Fichier (2).

A+
 

Pièces jointes

Re : copie de cellule

Bonjour,
En fait je voulais mettre un $ car je copie la formule sur le droite 3 fois, et dans ma recherche je change juste le n° de la colonne.
pour cela il faut que je mette le $...
le code juste avant m'aller très bien je pensais qu'il fallait changé juste un élément dans le .formula mais j'ai pas trouvé.
votre dernier code j'ai pas compris.
Merci de votre aide en tout cas
Manu
 
Re : copie de cellule

En fait je voulais mettre un $ car je copie la formule sur le droite 3 fois

Si vos tableaux sources ont 4 colonnes, vous pouvez utiliser :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, i As Variant, j As Variant
With [numero] 'nom défini
  Set r = Intersect(Target, .Offset(1).Resize(Rows.Count - .Row), Me.UsedRange)
End With
If r Is Nothing Then Exit Sub
For Each r In r 'si entrées multiples
  i = Application.Match(r, [TABLEAU].Columns(1), 0)
  j = Application.Match(r, [TABLEAU2].Columns(1), 0)
  If IsNumeric(i) Then
    r(, 2).Resize(, 3) = [TABLEAU].Cells(i, 2).Resize(, 3).Value
  ElseIf IsNumeric(j) Then
    r(, 2).Resize(, 3) = [TABLEAU2].Cells(j, 2).Resize(, 3).Value
  Else
    r(, 2).Resize(, 3) = ""
  End If
Next
End Sub
Fichier (3).

A+
 

Pièces jointes

Re : copie de cellule

Re,

Quand même pour régler ceci :

le resultat devient
SI(ESTNA(RECHERCHEV(RC4;TABLEAU;2;FAUX()));0;RECHERCHEV(RC4;TABLEAU;2;FAUX()))

Code:
Sub Formule()
If IsError(Application.Caller) Or Not Intersect(ActiveCell, [E1:E2]) Is Nothing Then Exit Sub
ActiveCell.FormulaR1C1 = IIf(ActiveSheet.DrawingObjects(Application.Caller).Text = "formule 1", [E1], [E2]).FormulaR1C1
End Sub
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
164
Retour