Copier valeur plage de cellule en vba

fenec

XLDnaute Impliqué
Bonsoir le forum

Je rencontre un problème car n’étant pas très fort en vba je ne parviens pas un créer un code pour réaliser ma tâche, je m’explique :
J’ai à l’aide de l’enregistreur fais un code pour copier les cellules vers d’autres mais ou ca coince c’est que je ne désire copier que les valeurs et non les formules. J’ai donc recommencé en ne copiant que les valeurs par collage spéciale
Les codes de l’enregistreur se trouvent dans le module 3.
J’espère avoir été assez précis.

Cordialement

Philippe

PS : j’ai oublié de préciser que la plage peu être plus longue ou plus courte, ce qui complique encore la tâche. En un mot la plage est évolutive par moment ou peu être plus petite et la je ne sais comment le faire.
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Re : Copier valeur plage de cellule en vba

Bonsoir

fenec
Tu peux faire comme ceci
Code:
Sub copie_val()
Dim ACOPIER As Range
Set ACOPIER = Range("M12:M18")
ACOPIER.Copy
Range("J23").PasteSpecial Paste:=xlPasteValues
End Sub
 

fenec

XLDnaute Impliqué
Re : Copier valeur plage de cellule en vba

Re le forum, Staple1600

Merci pour ta rapidité mais je vois que tu spécifie la plage la copier mais si j'ai plus de ligne ou moins la plage n'est pas variable dans ton code ou celle-ci j'adapte?

A+
 

fenec

XLDnaute Impliqué
Re : Copier valeur plage de cellule en vba

Re,
encore un petit soucis
si je supprime des lignes dans le tableau du haut les valeurs ne se colle pas au bon endroit dans le tableau ou je désire coller les valeurs.
Cordialement,
Philippe
 

Staple1600

XLDnaute Barbatruc
Re : Copier valeur plage de cellule en vba

Re

fenec
Alors utilises cette variante
NB: Nommer avant la cellule J23 avec le nom SOLDE, puis faire tes suppressions de ligne et teste la macro ci-dessous
Code:
Sub Copie_Val_III()
Dim vArr
vArr = Range(Cells(12, "M"), Cells(12, "M").End(xlDown)).Value
[SOLDE].Offset(1).Resize(UBound(vArr)).Value = vArr
End Sub
 

fenec

XLDnaute Impliqué
Re : Copier valeur plage de cellule en vba

Bonjour le forum, Staple1600

Un grand merci j'ai testé et sa fonctionne,j'ai par contre nommé la cellule J22.
Me reste a les testé dans mon fichier final, je re en cas de problèmes

Cordialement,

Philippe.
 

fenec

XLDnaute Impliqué
Re : Copier valeur plage de cellule en vba

Bonsoir le forum,
Je pensais pouvoir réussir a continuer mais rien n'y fait trop nul en vba.
Staple1600 m'a aider à copier les valeur dans une autre plage mais je ne parviens pas à supprimer les valeurs mais sans les formules dans le premier tableau.
J'ai essayer plusieurs truc sans succès comme:
Code:
Sub Copie_Val_IIII()
Dim vArr
 vArr = Range(Cells(12, "M"), Cells(12, "M").End(xlDown)).Value
 [SOLDE].Offset(1).Resize(UBound(vArr)).Value = vArr
 vArr = Range(Cells(12, "M"), Cells(12, "M").End(xlDown)).Value
 [SOLDE].Offset(1).SpecialCells(xlCellTypeConstants, 23).ClearContents
 End Sub
la ca me vide presque tout mon travail
ou encore
Code:
Sub Exemple_RAZ()

  On Error Resume Next
  ' Plage d'effacement à adapter
  Range("A2:Z78").SpecialCells(xlCellTypeConstants, 23).ClearContents
  On Error GoTo 0
End Sub
la ca ne fait rien
Je ne pensais pas que vider une plage en vba était si compliquer

Merci de votre aide

Cordialement?

Philippe
 

fenec

XLDnaute Impliqué
Re : Copier valeur plage de cellule en vba

Re,

Un éclair viens de passer par la ...

Comment mettre les cellules à zéro si je ne supprime pas les formules.

Je dois être faitguer,vais réfléchir avant de poster et surtout réfléchir comment je vais procéder pour avancer.

Cordialement...

Philippe
 

Staple1600

XLDnaute Barbatruc
Re : Copier valeur plage de cellule en vba

Bonsoir à tous

fenec
Est-ce là le résultat à obtenir ?
Code:
Sub CopyValAndClear()
Dim X As Range, vArr
Set X = Range(Cells(12, "M"), Cells(12, "M").End(xlDown))
vArr = X.Value
[SOLDE].Offset(1).Resize(UBound(vArr)).Value = vArr
X.Offset(, -11).Resize(, 12).SpecialCells(xlCellTypeConstants, 23).ClearContents
End Sub
EDITION: Ci-dessous une variante de la première macro
Code:
Sub CopyValAndClearII()
Dim vArr, lig&: lig = Cells(12, 13).End(xlDown).Row
Range(Cells(12, 2), Cells(lig, 13)).Name = "EFFACE"
vArr = [EFFACE].Item(12).Resize([EFFACE].Rows.Count).Value
[SOLDE].Offset(1).Resize(UBound(vArr)).Value = vArr
[EFFACE].SpecialCells(2, 23) = Empty
End Sub
 
Dernière édition:

fenec

XLDnaute Impliqué
Re : Copier valeur plage de cellule en vba

Bonsoir le forum,

Je reviens vers vous pour savoir s’il est possible de compléter le code de Staple1600 afin que celui me copie également les valeurs de la colonne voisine pris réel dans prie n-1.
J’ai essayé de modifier en nomment [SOLDE2] mais ca me copie les mêmes valeurs que Solde n-1.

Merci de votre aide,

Cordialement

Philippe.
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Re : Copier valeur plage de cellule en vba

Bonsoir à tous

fenec
Essaies ceci et redis mou si j'ai bien compris la question ;)
Code:
Sub CopyValAndClearIV()
Dim vArr, lig&: lig = Cells(12, 13).End(xlDown).Row
Range(Cells(12, 2), Cells(lig, 13)).Name = "EFFACE"
vArr = [EFFACE].Item(11).Resize([EFFACE].Rows.Count, 2).Value
[vZONE].Offset(1).Resize(UBound(vArr)).Value = vArr
[EFFACE].SpecialCells(2, 23) = Empty
End Sub
NB: vZONE est la plage nommée : I22:J22
 

fenec

XLDnaute Impliqué
Re : Copier valeur plage de cellule en vba

Re le forum, Staple1600

Déjà merci pour ta réponse.

Viens de tester mais hélas ca ne correspond pas à mon attente.
Vu l'heure et travaillant ce week-end j'abandonne pour ce soir .
J'essaie de te faire un fichier plus précis dès que possible.

Bon week-end

Cordialement

Philippe
 

fenec

XLDnaute Impliqué
Re : Copier valeur plage de cellule en vba

Bonjour le forum, Staple1600

Je reviens avec quelque précision sur ton dernier code, d’après ce que je comprends :
Par cette ligne :

Code:
Range(Cells(12, 2), Cells(lig, 13)).Name = "EFFACE"
Tu définis la zone à effacer soit :

Code:
='Etat de Congés'!$B$12:$M$18
Mais si j’actionne le code, il me vide la plage :

Code:
$B$12:$F$18
Alors que je désire la plage :

Code:
$L$12:$M$18
Pour cette ligne :

Code:
vArr = [EFFACE].Item(11).Resize([EFFACE].Rows.Count, 2).Value
Je ne la comprends pas

Dans mon cas la zone à effacer serait mais seulement les valeurs pas les formules

Code:
'Etat de Congés'!$L$12:$M$18
Trouvez mon fichier dans l'état suite à votre dernier code

J’espère avoir été plus précis

Cordialement

Philippe
 

Fichiers joints

Discussions similaires


Haut Bas