Range.Copy avec calcul

Thierry_ZT

XLDnaute Nouveau
Bonjour,

Je me heurte la tête contre les murs depuis 1 semaine :mad:

Dans mon classeur, j'ai une feuille récapitulative (feuil1) et plusieurs feuilles(feuil2, feuil3,...) identiques (même format, colonne...)

Je dois copier chaque colonne de feuil2, feuil3,... dans des colonnes spécifiques de la feuille récapitulative : pour regrouper toutes mes feuilles dans une seule.

J'utilise donc le code:
VB:
Option Explicit
Sub essai5()
Dim ws As Worksheet, i As String
Application.ScreenUpdating = False
Cells.Delete
i = ActiveSheet.Name
For Each ws In Worksheets
If ws.Name <> "récapitulatif" Then
Sheets(ws.Name).Activate
Range("B2:B" & Range("B65536").End(xlUp).Row).Copy _
Destination:=Sheets("récapitulatif").Range("F65536").End(xlUp)(2)
End If: Next ws: Sheets(i).Select: [a1].Select
End Sub

qui me copie toutes les colonnes B des feuilles: feuil2, feuil3,... (sans les en-têtes) dans la colonne F de ma feuille récap.

puis je rajoute:
VB:
Range("E2:E" & Range("E65536").End(xlUp).Row).Copy _
Destination:=Sheets("récapitulatif").Range("J65536").End(xlUp)(2)
pour copier les colonnes E dans la colonne J et ainsi de suite

Cela fonctionne mais j'ai 2 questions:
1-Est-ce que je peux faire un calcul sur le champ copié?
Par exemple, mes colonnes E contiennent mon prix d'achat que je voudrais multiplier par un coefficient pour avoir mon prix de vente dans ma feuille récapitulative. A savoir aussi que les chiffres contenus dans ces cellules sont avec une virgule et pas un point.
2-Comment ajouter des valeurs fixes dans d'autres colonnes de ma feuille récap lors de la copie des autres données?

Merci d'avance pour votre aide.
 
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : Range.Copy avec calcul

Bonjour Thierry_ZT le forum
oui on peut bien sur faire un calcul avec une macro mais il faudra revoir ta macro pour ne pas coller directement tes données, mais par exemple passer par des tableaux
enfin sans fichier et sans exemple de ce que tu veux ajouter et calculer difficile de répondre plus avant !!!!!!
a+
Papou :)
 

Thierry_ZT

XLDnaute Nouveau
Re : Range.Copy avec calcul

Merci Paritec,

Le fichier en question est joint.

PS: J'avoue que je débute en VBA sur Excel !!
 

Pièces jointes

  • fichier_general - Copie.xlsm
    34.9 KB · Affichages: 73
  • fichier_general - Copie.xlsm
    34.9 KB · Affichages: 79
  • fichier_general - Copie.xlsm
    34.9 KB · Affichages: 68

Paritec

XLDnaute Barbatruc
Re : Range.Copy avec calcul

Bonjour Thierry_ZT le forum,
oui alors maintenant j'ai ton fichier mais tu veux quoi tu n'expliques rien dans le fichier!!!
tu fais une boucle sur toutes les feuilles pour retirer les lignes si les lignes colonne D sont vides tu supprimes la ligne, OK mais après????
tes calculs objet de ton post on les mets ou ?? et pourquoi?, et les valeurs à ajouter c'est quoi et dans quelles conditions?? Bref expliques un peu voir même fais nous un exemple dans le fichier.
des que tu auras apporté les éléments on fera
a+
papou :)
 

Thierry_ZT

XLDnaute Nouveau
Re : Range.Copy avec calcul

Ben si c'est expliqué :p

Dans la colonne store, il faut mettre "admin" sur chaque ligne
Dans la colonne websites, mettre "base" sur chaque ligne
Et pour le prix, le code de copie:
VB:
'price
Range("g2:g" & Range("g65536").End(xlUp).Row).Copy _
Destination:=Sheets("récapitulatif").Range("r65536").End(xlUp)(2)
doit être multiplié par un coeff (2 par exemple) avant d'être copié sur la feuille récapitulatif

Voilà...
 

fifi

XLDnaute Occasionnel
Re : Range.Copy avec calcul

bonjour.

avec le collage spéciale tu peux t'en sortir.


déjà je te conseille de changer l'écriture VBA pour le copié collé.

pour le copié collé :

Code:
Dim plage_to_copy as range 
Dim n as integer  ''nombre de ligne de la plage
plage_to_copy = Sheets("récapitulatif").Range("r65536").End(xlUp).Address
n  = range(plage_to_copy).rows.count
Range("g2:g" & n) =  range(plage_to_copy).value

Ensuite pour multiplier par 2:

Code:
range("A1") = 2  ''''valeur par laquelle il faut multiplier toutes les cellules de la plage

    Range("BI2").Copy
    Range("g2:g" & n).PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
        SkipBlanks:=False, Transpose:=False


à adapter bien sur
 

Thierry_ZT

XLDnaute Nouveau
Re : Range.Copy avec calcul

pour le copié collé :

VB:
Dim plage_to_copy as range 
Dim n as integer  ''nombre de ligne de la plage
plage_to_copy = Sheets("récapitulatif").Range("r65536").End(xlUp).Address
n  = range(plage_to_copy).rows.count
Range("g2:g" & n) =  range(plage_to_copy).value

Merci fifi, mais le code me génére une erreur: Variable objet ou variable de bloc Width non définie sur la ligne:
VB:
plage_to_copy = Sheets("récapitulatif").Range("r65536").End(xlUp).Address
 

fifi

XLDnaute Occasionnel
Re : Range.Copy avec calcul

effectivement la plage est mal définie avec d'autre petites erreurs.
cette fois le code marche chez moi.

faut mettre :
Code:
Dim plage_to_copy As Variant
Dim n, m As Integer  '''nombre de ligne de la plage

'''détermination de la plage à copier
n = Sheets(ws.Name).Range("R65536").End(xlUp).Row
 plage_to_copy = Sheets(ws.Name).Range("R2:R" & n).Address

'''détermination de la plage ou coller
m = Sheets("récapitulatif").Range("f65536").End(xlUp).Row + 1

'''collage de la valeur
Sheets("récapitulatif").Range("f" & m & ":f" & m + n) = Sheets(ws.Name).Range(plage_to_copy).Value

'''multiplication de la plage par 2
Sheets("récapitulatif").Range("A1") = 2  ''''valeur par laquelle il faut multiplier toutes les cellules de la plage
Sheets("récapitulatif").Range("A1").Copy
 Sheets("récapitulatif").Range("f" & m & ":f" & m + n).PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
        SkipBlanks:=False, Transpose:=False

'''ajout de valeur fixe dans la colonne à droite de la plage de collage
Sheets(ws.Name).Range("f" & m & ":f" & m + n).Offset(0, 1).FormulaR1C1 = tavaleur
 

Thierry_ZT

XLDnaute Nouveau
Re : Range.Copy avec calcul

Ok, le calcul fonctionne mais comme les valeurs dans les cellules à copier sont avec une virgule, la multiplication ne marche pas.
En forçant le prix avec un point, çà fonctionne.
Comment remplacer cette virgule par un point?
 

Thierry_ZT

XLDnaute Nouveau
Re : Range.Copy avec calcul

Bon, j'ai revu le code vba.

Je n'arrive toujours pas à faire le calcul sur le prix (même en mettant la virgule comme séparateur de décimal) et il y a un décalage de ligne lors du changement de Sheet.

Merci encore fifi pour ton aide, je pense qu'une fois ceci résolu je pourrais me débrouiller.
 

Pièces jointes

  • fichier_general - Copie.xlsm
    38.2 KB · Affichages: 45
  • fichier_general - Copie.xlsm
    38.2 KB · Affichages: 37
  • fichier_general - Copie.xlsm
    38.2 KB · Affichages: 52

Paritec

XLDnaute Barbatruc
Re : Range.Copy avec calcul

Bonsoir Thierry_ZT le forum
ton fichier en retour avec ce que tu voulais
a+
Papou :)

EDIT: oui juste un truc pour changer le multiplicateur il te faudra modifier
coef = "" là tu mets ce que tu souhaites"" moi j'ai mis 1.5
 

Pièces jointes

  • fichier_general - CopieV2.xlsm
    35.6 KB · Affichages: 55
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : Range.Copy avec calcul

Re Thierry_ZT le forum
oui j'avais pas vu que tu voulais le nom de la feuille en colonne C
alors voilà le fichier avec la modif
a+
Papou :)
 

Pièces jointes

  • fichier_general - CopieV3.xlsm
    36.8 KB · Affichages: 57
Dernière édition:

Discussions similaires

Réponses
7
Affichages
360
Réponses
7
Affichages
235
Réponses
2
Affichages
303

Statistiques des forums

Discussions
312 495
Messages
2 088 969
Membres
103 993
dernier inscrit
Essens