XL 2016 VBA - copie des valeurs d'un tab avec redimentionnement

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

faenor86

XLDnaute Nouveau
Bonjour,

Petit problème de débutant VBA :
J'ai 3 cellules contenues dans une feuille F1, je chercher à les copier en passant par un tableau, puis à les coller dans une feuille F2.

J'ai déjà fait de nombreux test avec objets ou sans objets définis mais pas moyen de réaliser ce satané copier/coller....
ci-dessous mon code sans objet :
Code:
Sub copiercollercellules2()
 
    Dim A, B, C As Long
    Dim Vartab As Variant
  
  
    A = Sheets("F1").Range("A4")
    B = Sheets("F1").Range("C4")
    C = Sheets("F1").Range("C7")
  
    Vartab = Array(A, B, C)
  
    'on cherche à copier les cases A4-C4-C7 présent dans l'onglet F1 vers l'onglet F2. Les données seront coller à partir de A2 sur forme d'une seule ligne
  
  
    Sheets("F2").Select
    Range("A2").Resize(1, UBound(Vartab.Value) + 1) = Vartab

End Sub

Si quelqu'un a une solution à partir de cette méthode, je lui en serais très reconnaissant !
Merci
Très cordialement
 
bonjour,
Essaie :
Code:
Sub copiercollercellules2()
Dim A, B, C As Long
Dim Vartab As Variant
A = Sheets("F1").Range("A4")
B = Sheets("F1").Range("C4")
C = Sheets("F1").Range("C7")
Vartab = Array(A, B, C)
With Sheets("F2")
.Select
.Range("A2").Resize(1, UBound(Vartab) + 1) = Vartab
End With
End Sub
A+
 
Rebonjour !

Il s'agissait de la première étape de mon projet : copier des cellules désordonnées vers un autre onglet en les mettant sur une ligne.
L'étape suivante est qu'à chaque exécution de la Macro, j'incrémente un ID et que les transferts (ou sauvegardes) se fassent les un en dessous des autres comme sur l'exemple qui suit :
upload_2017-11-16_19-39-51.png


J'ai actuellement le code suivant :
VB:
Sub copiercollercellules2()
 
    Dim A, B, C As Long
    Dim D As Date
    Dim NbLignes As Integer
    Dim NumLigne As Integer
    Dim Vartab As Variant
  
  
    A = Sheets("F1").Range("A4")
    B = Sheets("F1").Range("C4")
    C = Sheets("F1").Range("C7")
    D = Now
  
    'on cherche à copier les cases A1-C3-C6 présent dans l'onglet F1 vers l'onglet F2. Les données seront collées à partir de A2 sur forme d'une seule ligne
    'intégration d'un ID et de la date d'excécution de la macro
  
    Sheets("F2").Select
    NbLignes = Selection.Rows.Count
    Vartab = Array(NbLignes, D, A, B, C)
    NumLigne = NbLignes + 1
    Range("A" & NumLigne).Resize(1, UBound(Vartab) + 1) = Vartab
  
    NumLigne = NumLigne + 1

End Sub

En réalité le code ne copie qu'une occurence... mais je n'ai pas d'erreur
Quelqu'un verrait-il ce qui coince ?

Merci pour votre patience
 
Dernière édition:
Hello !
ça fonctionne nickel 🙂
Je suis impressionné qu'un aussi petit code réponde à mes attentes 😉

En résumé et pour bien comprendre :
- tu crée un tableau dynamique et une variable de comptage
- tu sélectionnes l'objet F1
- tu comptes le nb de ligne dans le feuille F2
- tu stockes les valeurs de nos cellules dans un tableau
- tu redimensionnes le tableau et déverses le contenu sur F2 dont le point de départ est variable

une ligne m'intéresse tout particulièrement : x = Sheets("F2").Cells(Rows.Count, 2).End(3)(2).Row
que signifie après .END, les (3) et (2) ?

Merci et bon weekend
 
Bonsoir le fil, le forum

Je me permets de répondre, leti étant AFK 😉
3: xlUp
2:Offset(1)

En guise d'illustration
VB:
Sub PetitTest()
Dim L&, A$
Cells.Clear
'petit clin d'oeil pour générer des donées de test
ActiveSheet.Cells(VBA.Round(Rnd * 1600, 0), 1).Value = Chr(149)
'écriture "allégée"
L = ActiveSheet.Cells(Rows.Count, 1).End(3)(2).Row: A = ActiveSheet.Cells(Rows.Count, 1).End(3)(2).Address(0, 0)
MsgBox "Ligne: " & L & vbCrLf & "Cellule: " & A
Application.Goto ActiveSheet.Cells(Rows.Count, 1).End(3), True
'écriture classique
MsgBox ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1).Address(0, 0)
End Sub
 
Dernière édition:
re tous🙂🙂🙂
l'ami Jean Marie a bien "bossé"😉 bien son petit exemple😉

beaucoup de methode pour ecrire cela
exemple en simplifiant la restitution dans ton cas variable t paranthése pas obligatoire idem dans premier post
VB:
Sub a()
Dim t, x As Long
With Sheets("F1")
   x = Sheets("F2").Cells(Rows.Count, 2).End(3)(2).Row
   t = Array(x - 1, Now, .[A4], .[C4], .[C7])
  Sheets("F2").Range("A" & x).Resize(, 5) = t
End With
End Sub

ou encore

VB:
Sub b() 'sans declarer un tablo
Dim x As Long
With Sheets("F1")
   x = Sheets("F2").Cells(Rows.Count, 2).End(3)(2).Row
  Sheets("F2").Range("A" & x).Resize(, 5) = Array(x - 1, Now, .[A4], .[C4], .[C7])
End With
End Sub

on peut enlever le(2) traiter x directement

VB:
Sub c()
Dim x As Long
With Sheets("F1")
   x = Sheets("F2").Cells(Rows.Count, 2).End(3).Row
  Sheets("F2").Range("A" & x + 1).Resize(, 5) = Array(x, Now, .[A4], .[C4], .[C7])
End With
End Sub
avec cells
' Sheets("F2").Cells(x + 1, 1).Resize(, 5) = Array(x, Now, .[A4], .[C4], .[C7])

ect....
 
Dernière édition:
Rebonjour !

Les Weekend pluvieux sont propices au développement VBA....

Je souhaiterai complexifier la macro en récupérant des dossiers de divers feuilles de calcul.
Pour mémoire actuellement le code copie des valeurs de l'onglet F1 vers le F2. Est-il possible de récupérer les valeurs des cellules éparses situées dans F1 et F0 (nouvel onglet) pour les mettre dans F2 ?

merci !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
703
Réponses
1
Affichages
494
Retour