Copie de cellules d'une ligne

Ptitnabab

XLDnaute Nouveau
Bonjour et merci par avance de l'aide que vous pourrez m'apporter.
Je commence tout juste à explorer le code VB par l'intermédiaire d'Excel et je m'excuse par avance si ma questions est très basique et sa solution surement très simple.

J'ai cherché sur les anciens post, j'y ai trouvé quelques éléments de réponse mais je suis pas encore au point quand à appréhender tout un code pour l'adapter malgré une certaine rigueure.


J'utilise un classeur Excel2003 composé de deux feuilles.
La première est un listing d'articles avec en colonnes (A, H) différentes caractéristiques dont un prix unitaire. La colonne I est destinée à une quantité à remplir manuellement.
La seconde feuille est destinée à l'impression avec une mise en page qui serait automatique.

Quand une quantité est entrée dans la colonne I de la feuille 1, la ligne est copiée vers la feuille 2 grâce au code suivant :

Sub copiedeligne()

Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long

Sheets("Feuil2").Activate ' feuille de destination

Col = "I" ' colonne de la donnée non vide à tester
NumLig = 0
With Sheets("Feuil1") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 1 To NbrLig
If .Cells(Lig, Col).Value <> "" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Cells(NumLig, 1).Select
ActiveSheet.Paste​
End If​
Next
End With

End Sub

Jusque là tout fonctionne mais j'aimerais sur ma feuille 2 en colonne J, et pour chaque ligne, insérer une fonction Produit (Prix unitaire X Quantité).
Seulement cette fonction disparait de ma colonne vu que la ligne entière est copiée. J'ai fait plusieurs essais avec Range sans résultats pour l'instant, n'étant pas encore très familier du langage et de sa syntaxe.

Si quelqu'un pouvait m'aider a comprendre si il s'agit juste de mieux définir les cellules à copier ou bien de revoir ma méthode de copie.

Merci.

Thomas
 

Gorfael

XLDnaute Barbatruc
Re : Copie de cellules d'une ligne

Salut Ptitnabab
Utilise les balise Code (icone #), ton sujet n'en sera que plus lisible.

Si j'ai compris ton problème : tu as une feuille qui te sers de Référence (F1 pour faire simple) et une feuille (F2) qui te sers de "lettre type".
tu veux que si tu entres une quantité en I de F1, la ligne soit reportée sur F2 par action sur un bouton (moi je préfèrerais que ça se fasse automatiquement pour éviter les oublis).

Ton problème : en J de F2, tu as une formule qui calcule (Prix unitaire X Quantité).

Comme on est sur excel, le nombre de solutions...
- calculer , la multiplication (colonnes ?) et l'inscrire en J sans ta macro
- inscrire en J la formule, apès avoir copier :
fait une macro apprentissage :
Menu Outils>>Macro>>Nouvelle Macro => tu valides
tu fais ta formule en J10 (par exemple) de F2, tu la vaildes et tu arrêtes la macro : tu peux aller voir le code de cette macro, il y aura une instruction qui commence par
Selection.FormulaR1C1 =
Tu la copies et , en remplaçant Selection par.Cells(Lig, Col) tu la colles dans ta macro :
Code:
.Cells(Lig, Col).EntireRow.Copy
.Cells(Lig, Col).FormulaR1C1 =......
Autre solution, ne copier que les cellules A:I => ta formule en J n'est pas touchée :
Code:
Sub copiedeligne()
'Déclarations ===================
Dim Lig As Long
Dim F1 As Worksheet, F2 As Worksheet
Dim x
'MEI ============================
Set F1 = Sheets("Feuil1")
Set F2 = Sheets("Feuil2")
'Copie ==========================
For Lig = 1 To F1.[I65536].End(xlUp).Row
    If F1.Cells(Lig, "I") <> "" Then _
        F1.Range(F1.Cells(Lig, "A"), F1.Cells(Lig, "I")).Copy _
        F2.Cells(F2.Cells(65536, "I").End(xlUp)(2).Row, "A")
Next
Application.CutCopyMode = False
End Sub
Ce n'est pas la même que la tienne. Elle commence en ligne 2, parce qu'en ligne 1 de F2, j'ai mes titre de colonnes.
On peut aussi ne vouloir copier que les valeurs
Code:
    If F1.Cells(Lig, "I") <> "" Then _
        F1.Range(F1.Cells(Lig, "A"), F1.Cells(Lig, "I")).Copy _
        F2.Cells(F2.Cells(65536, "I").End(xlUp)(2).Row, "A")
devient
Code:
    If F1.Cells(Lig, "I") <> "" Then
        F1.Range(F1.Cells(Lig, "A"), F1.Cells(Lig, "I")).Copy
        F2.Cells(F2.Cells(65536, "I").End(xlUp)(2).Row, _
                          "A").PasteSpecial xlPasteValues
    End If
Je n'explique pas le code, parce qu'il me semble simple à comprendre, mais s'il y a besoin d'explication, surtout ne pas hésiter.
A+
 

Discussions similaires

Réponses
4
Affichages
204

Statistiques des forums

Discussions
312 611
Messages
2 090 226
Membres
104 452
dernier inscrit
hamzamounir