[VBA] Copier/coller si formule renvoie valeur supérieur à 0

Bonjour,

Je souhaiterais connaitre le code VBA pour une plage (ligne précise) qui me permettrait de balayer la ligne et de copier en valeur que celles dont le chiffre est supérieur à 0 et de conserver les formules dans les autres. Je précise je suis débutant sur VBA.

Voici le bout de code que j'utilise :

Sub test()

Dim plage As Variant

Sheets("détail").Select

plage = Cells("10,369").End(xlToLeft).Offset(0, 1).HasFormula

If plage > "1" Then

selection.Copy

selection.PasteSpecial xlPasteValues

End If

End Sub

Merci pour votre aide et bonne journée

Bonjour,

A noter que l'utilisation des guillemets est réservée à du texte. Ainsi, pour Excel ou VBA, 1 est un nombre, "1" est un caractère. Dans certains cas, Excel tente de reconnaître les nombres stockés sous forme de texte, mais autant lui faciliter la tâche !

Ensuite, ce serait trop simple d'appliquer une condition à une plage entière. Il faut donc balayer un par un les éléments de la plage pour déterminer au cas par cas l'action à mener.

Une proposition :

Sub test()

Dim plage As Range 'C'est un objet plage
Dim Cel As Range

'Select est inutile tant que l'on précise la feuille
With Sheets("détail") 'Ici, tout élément qui débute par "." se rattache à cette feuille
    Set plage = .Range(.Cells(10,369), .Cells(10,369).End(xlToLeft)) 'On définit la plage : ligne 10, colonne 369 à dernière colonne contiguë
    For Each Cel In plage 'Boucle sur chaque cellule de la plage
        If Cel > 0 Then Cel.Value = Cel.Value '.Value correspond à la valeur contenue dans la cellule. S'il y a une formule, elle est remplacée par sa valeur.
    Next Cel
End With

End Sub

Bonjour Pedro22,

Je te remercie pour ta réponse et tes explications claires. Je vais tester et je ferai un retour.

Merci.

Pedro22,

C'est parfait ça fonctionne, je te remercie.

Et pour terminer, je dois reproduire sur les 2 lignes en dessous que dois-je ajouter comme variable stp ?

Tu peux soit rendre le numéro de ligne (10) variable dans la définition de la plage :

.Cells(10,369) devient .Cells(Lig,369) et inclure la procédure existante dans une nouvelle boucle For Lig = 10 To 12

Ou plus simple encore, donner une ligne de fin différente de la ligne de début (toujours dans la définition de ta plage) :

.Range(.Cells(10,369), .Cells(10,369).End(xlToLeft)) devient .Range(.Cells(10,369), .Cells(12,369).End(xlToLeft))

Top !

Merci Pedro22.

Top !

Merci Pedro22.

Merci du retour, pense à valider le sujet !

Rechercher des sujets similaires à "vba copier coller formule renvoie valeur superieur"