Résolu VBA Copier uniquement la valeur d'une cellule sans prendre en compte la formule

Philou250

Habitué
Bonjour,

Je souhaiterai faire une macro qui permettrai de copier le resultat d'une cellule (sans prendre en compte la formule) dans une autre cellule.
En gros :

Si la cellule A1 contient =B1/C1 et que le resultat de la formule est 2.5
J'aimerais que la cellule A4 (par exemple) prenne pour valeur 2.5 et non pas =B4/C4

Avant de copier/coller les cellules on pourrait rajouter le $, mais sur le fichier il y a trop de cellule et on risquerait de perdre trop de temps.

Y aurait-t'il pas une autre solution du genre :
range("A1").value.copy range("A4")
J'ai essayé ça marche pas ^^

[Edit]
L'enregistreur de macro m'a donné ça :

Code:
    Range("A1:A11").Copy
    Range("D18").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Mais j'en connais qui n'aime pas trop le pastespecial :)

Y aurait-t'il pas une autre solution ?
 

tantal_fr

Grand Maître
Bonjour Philou250,

Je m'étais posé la même question que toi (cf ), il en étais ressorti que la meilleur solution (dans mon cas) c'étais :

Code:
' // Soit range une plage de cellules
range.Formula = range.Value
 

zeb

Modérateur
Meilleure réponse
Salut, devine qui est là ?
C'est celui qui n'aime pas les copier/coller !

Arrête de faire des copier/coller.
Arrête de faire des select.

Si je ne l'ai pas écrit 1000 fois sur ce forum, c'est que je ne l'ai jamais écrit.

-------------------------

Je reprends.
"Si la cellule A1 contient =B1/C1 et que le résultat de la formule est 2.5, j'aimerais que la cellule A4 (par exemple) prenne pour valeur 2.5 et non pas =B4/C4"

Facile :
Code:
If Range("A1").Formula = "=B1/C1" And Range("A1").Value = 2.5 Then Range("A4").Value = 2.5

Bon, en essayant de "traduire" ton besoin :
Code:
Range("A4").Value = Range("A1").Value

:spamafote:

Ça répond à ta question ?

-------------------------

Edit : GRILLLLLED
 

zeb

Modérateur
Marque le sujet comme résolu en sélectionnant une des réponses comme meilleure solution.
[:zeb:6]

(C'est récurrent comme phrase. Je vais en faire un smiley. Philou, je te le dédie ;) )
 

Philou250

Habitué
Je viens de marquer le sujet comme résolu, mais en fait, j'ai peut être oublié un détail : les valeurs des cellules que je souhaite "copier" doivent aller dans une autre feuille.

Donc, pensant bien faire, j'ai tapé ça :

Code:
 Private Sub CommandButton1_Click()
Dim wsSetup As Worksheet
Dim wsMonth As Worksheet

Set wsSetup = Worksheets("Sheet1")
Set wsMonth = Worksheets("Sheet2")

wsSetup.Range(Cells(1, 1), Cells(1, 30)).Formula = wsMonth.Range(Cells(6, 1), Cells(6, 30)).Value
End Sub

Mais il semblerait qu'il y ai un soucis à cause des wsSetup et wsMonth devant les ranges.

Ma question est donc, comment faire pour copier la valeur d'une cellule dans une autre feuille ?
 

zeb

Modérateur
LOL

C'est presque ça.
Le problème ne vient pas de la présence des ws* devant les range, mais leur absence devant les cells !

Code:
wsSetup.Range(wsSetup.Cells(1, 1), _
              wsSetup.Cells(1, 30)).Formula = wsMonth.Range(wsMonth.Cells(6, 1), _
                                                            wsMonth.Cells(6, 30)).Value
 

zeb

Modérateur
Méfie-toi, je viens de relire mon code et je l'ai quelque peu modifié.

Sinon, pour éviter les écritures lourdes, il y a plusieurs moyens :
Code:
' // Simple
wsSetup.Range("A1:AD1").Formula = wsMonth.Range("A1:AD1").Value

' // Avec
With wsSetup
    .Range(.Cells(1, 1), .Cells(1, 30)).Formula = _
                      wsMonth.Range(wsMonth.Cells(6, 1), wsMonth.Cells(6, 30)).Value
End With

' // Variables
Dim zoneS As Range
Dim zoneM As Range

Set zoneS = wsSetup.Range(wsSetup.Cells(1, 1), wsSetup.Cells(1, 30))
Set zoneM = wsMonth.Range(wsMonth.Cells(1, 1), wsMonth.Cells(1, 30))

zoneS.Formula = zoneM.Value

...
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 136
Messages
6 718 117
Membres
1 586 397
Dernier membre
Chachabidou
Partager cette page
Haut