Copier les valeurs d'une plage en ne précisant que la 1 cellule en destination

BIROULIG

XLDnaute Nouveau
Bonjour, Niveau VBA débutant. Excel 2002

Je souhaiterai savoir s'il est possible en vba à partir d'un classeur Excel de copié les valeurs d'une plage ayant cette forme là: Sheets("feuil1").Range("B70,C70,B47,C71,B31,b48,b49,B33,B44,B46,B42,B43,B35:B41") et de les mettre en Sheets("Feuil2").Range("B4") pour la cellule B70 et en précisant le sens de décalage (décalage de colonnes B5,B6,B7....) j'aimerai ne pas avoir à calculer manuellement la dernière cellule car il faut que je le fasse pour plusieurs plages. J'ai tenté sans succès et n'ai rein trouver pour m'en inspirer!
Trugarez
 

ROGER2327

XLDnaute Barbatruc
Re : Copier les valeurs d'une plage en ne précisant que la 1 cellule en destination

Bonsoir BIROULIG
Un essai :
VB:
Sub copier()
  toto Sheets("Feuil1").Range("B70,C70,B47,C71,B31,B48,B49,B33,B44,B46,B42,B43,B35:B41"), _
    Sheets("Feuil2").Range("B4") 'Données et destination à adapter.
End Sub

Sub toto(Orig As Range, Dest As Range, Optional sens$ = "")
'
'Syntaxe :
'toto plage_à_copier, première_cellule_de_destination[, sens]
'sens="" ou omis : recopie verticale
'sens<>"" : recopie horizontale
'
Dim i&, a&, oPlg As Range, oCel As Range, sDat()
  With Orig
    ReDim sDat(1 To .Cells.Count)
    For Each oPlg In .Areas
      For a = 1 To oPlg.Count: i = i + 1: sDat(i) = oPlg(a): Next
    Next oPlg
    If sens = "" Then
      Dest.Resize(.Cells.Count, 1).Value = WorksheetFunction.Transpose(sDat)
    Else
      Dest.Resize(1, .Cells.Count).Value = sDat
    End If
  End With
End Sub
ROGER2327
#5229


Samedi 21 Palotin 138 (Occultation de Saint Mce le Dr Sandomir, SQ)
21 Floréal An CCXIX
2011-W19-2T22:46:38Z
 

kjin

XLDnaute Barbatruc
Re : Copier les valeurs d'une plage en ne précisant que la 1 cellule en destination

Bonsoir,
Code:
Dim ta(), i&
ta = Array("B70", "C70", "B47", "C71", "B31", "B48", "B49", "B33", "B44", "B46", "B42", "B43" _
, "B35", "B36", "B37", "B38", "B39", "B40", "B41")
With Sheets("feuil1")
    For i = 0 To UBound(ta)
        ta(i) = .Range(ta(i))
    Next
End With
Sheets("feuil2").Range("B4").Resize(UBound(ta) + 1, 1) = Application.Transpose(ta)
Edit : salutations Roger
A+
kjin
 
Dernière édition:

BIROULIG

XLDnaute Nouveau
Re : Copier les valeurs d'une plage en ne précisant que la 1 cellule en destination

Bonsoir Roger et kjin
Merci pour les réponses j'essaierai les 2 solutions car celle de Roger me parait plus abordable mais la tienne est plus courte et je dois la faire plusieurs fois et j'aime bien comprendre ce que je fais
Merci et Kénavo
 

BIROULIG

XLDnaute Nouveau
Re : Copier les valeurs d'une plage en ne précisant que la 1 cellule en destination

Bonsoir Roger je viens de faire l'essai NICKEL! et j'ai pu l'adapter à mes besoins. Pour la solution à Kjin je vais l'essayer mais j'aurais plus de difficulté je pense.
Merci BIROULIG
 

BIROULIG

XLDnaute Nouveau
Re : Copier les valeurs d'une plage en ne précisant que la 1 cellule en destination

Bonjour le forum,
Je sollicite à nouveau votre aide ,(j'espère que le moyen n'est pas trop cavalier).
J'ai voulu me resservir de la solution à ROGER2327 qui fonctionnait mais en utilisant cette fois ci le noms de cellule nommées dans excel (pour un autre sujet)
et au lieu de : toto Sheets("Feuil1").Range("B70,C70,B47,C71,B31,B48,B49,B33,B44,B46,B42,B43,B35:B41"), _
Sheets("Feuil2").Range("B4")
j'ai tapé: toto Sheets("Feuil1").Range("PORTABLE","INTERNET","TELEPHONIE"), _
Sheets("Feuil2").Range("39")
le reste est inchangé
mais ça ne fonctionne que pour la 1ere cellule peu importe l'ordre. Je ne vois pas pourquoi?

Si quelqu'un peu éclairé simplement ma lanterne (elle brûle faiblement).

Merci BIROULIG
 

ROGER2327

XLDnaute Barbatruc
Re : Copier les valeurs d'une plage en ne précisant que la 1 cellule en destination

Re…
Je ne crois pas que le code que vous proposez ait fonctionné, même partiellement, pour au moins deux raisons : ni "TELE PHONIE" ni "39" ne sont des noms valables pour des plages nommées. Passons…

Peut-être que celui-ci fonctionnera :
VB:
  toto Sheets("Feuil1").Range("PORTABLE,INTERNET,TELEPHONIE"), _
    Sheets("Feuil2").Range("A1") 'ou tout autre nom valable pour une cellule
ROGER2327
#5323


Mardi 24 Merdre 138 (Sainte Purge, sage - femme - fête Suprême Quarte)
22 Prairial An CCXIX, 1,1282h - camomille
2011-W23-5T02:42:28Z
 

BIROULIG

XLDnaute Nouveau
Re : Copier les valeurs d'une plage en ne précisant que la 1 cellule en destination

Bonsoir et merci à ROGER2327,
Désolé pour mon inattention et car j'ai tapé un espace en trop et il manque un B avant le 39 sinon la solution je pensait l'avoir testé au début mais sans succès car elle fonctionne. Mes débuts sont laborieux.

Le forum est très bien et les réponses mêmes basiques sont rapides.

merci BIROULIG
 
Haut Bas