Microsoft 365 VBA Copier / Coller Valeur sur une autre feuille, dernière ligne vide

Sylvain29

XLDnaute Nouveau
Bonjour,

Suite à de nombreuses recherches sur différents forums, je ne parviens pas à réaliser ma macro.
Je débute dans le codage VBA.
Je souhaite copier des données sur une feuille "Devis" non disposées sur une même ligne mais dans différentes cellules sur la feuille.
Puis coller leurs valeurs sur une autre feuille "suivi" sur une même ligne dans un tableau.
Je souhaite que ce collage se mette à la suite des lignes précédemment complété par cette procédure.
Je parviens à copier/coller ces valeurs sur la première ligne du tableau, mais mes différents essais pour compléter la dernière ligne disponible reste infructueux.

Voici ma macro :

Sub ajout_suivi_geste_co()

'Copie numéro de compte
Range("B13").Select
Selection.Copy
Sheets("Suivi Budget geste CO").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'Copie date mois
Sheets("Devis Clients").Select
Range("B14").Select
Selection.Copy
Sheets("Suivi Budget geste CO").Select
Range("B9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'copie nom client
Sheets("Devis Clients").Select
Range("C12").Select
Selection.Copy
Sheets("Suivi Budget geste CO").Select
Range("D9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'copie quanti et prix
Sheets("Devis Clients").Select
Range("G25:H25").Select
Selection.Copy
Sheets("Suivi Budget geste CO").Select
Range("F9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'copie référence
Sheets("Devis Clients").Select
Range("A25").Select
Selection.Copy
Sheets("Suivi Budget geste CO").Select
Range("E9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False



End Sub


Bien à vous.
Sylvain
 
Solution
Bonjour Sylvain29, _Thierry,

Quand on ne copie que les valeurs le mieux est d'utiliser des tableaux VBA c'est bien plus rapide.

Voyez le fichier joint et cette macro :
VB:
Sub ajout_suivi_geste_co()
Dim tablo, resu(), i&, n&
With Sheets("Devis Clients")
    tablo = .Range("A1", .UsedRange).Resize(, 8) 'matrice, plus rapide
End With
ReDim resu(1 To UBound(tablo), 1 To 6)
For i = 25 To UBound(tablo)
    If tablo(i, 1) <> "" Then
        n = n + 1
        resu(n, 2) = tablo(13, 2) 'numéro de compte
        resu(n, 1) = tablo(14, 2) 'date mois
        resu(n, 3) = tablo(12, 3) 'nom client
        resu(n, 5) = tablo(i, 7) 'Qté
        resu(n, 6) = tablo(i, 8) 'montant
        resu(n, 4) = tablo(i, 1) 'référence
    End If
Next
If n =...

Sylvain29

XLDnaute Nouveau
Job75,

encore moi...
J'ai intégré la macro à mon document (confidentiel).
Mais j'ai omis de te dire qu'en dessous de la ligne 60 j'ai des cellules que je ne souhaite pas copier.
Comment puis-je réduire la plage de données à copier? La limiter à la ligne 60.

Je te remercie encore une fois.
 

job75

XLDnaute Barbatruc
En fait s'il y a des milliers de lignes sous la ligne 60 ça prendra du temps.

Il vaut mieux ajouter une ligne comme ceci :
VB:
For i = 25 To UBound(tablo)
    If i > 60 Then Exit For 'arrête la boucle
    If tablo(i, 1) <> "" Then
 

Discussions similaires