Copier sur prochaine cellule vide [Résolu]

Signaler
Messages postés
17
Date d'inscription
vendredi 17 juillet 2020
Statut
Membre
Dernière intervention
28 août 2020
-
Messages postés
17
Date d'inscription
vendredi 17 juillet 2020
Statut
Membre
Dernière intervention
28 août 2020
-
Bonjour,



j'ai un tableau que je filtre, et au fur et à mesure je souhaite copier les différentes zones filtré sur le même onglet. J'utilise .currentregion pour selectionner la zone et .range() pour la destination. sauf que la zone de destination est fixe et je ne vois pas comment articuler le code différemment pour que le tableau se colle à la suite.

deux questions:
- comment codé pour avoir la prochaine cellule vide (voir la cell(0,2))
- y a t'il un code qui permet de copier juste la zone selectionnée (mise en surbrillance)??
Merci


voici mon code:

Sub CopieColle()

'exemple d'utilisation de la fonction "FeuilleExiste"

If Not Feuille_Existe(Sheets("Projet").Range("i1")) Then
With Sheets.Add
.Name = Sheets("Projet").Range("i1")
End With
Sheets("Projet").Range("C5:h25").Copy
Sheets(Sheets("Projet").Range("i1").Value).Range("C6").PasteSpecial xlPasteValues
Else
Sheets("Projet").Range("C5:h25").Copy
Sheets(Sheets("Projet").Range("i1").Value).Range("C6").PasteSpecial xlPasteValues
End If

End Sub

8 réponses

Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712
bonjour, merci de préciser "basic" quand tu partages du code VBA.
pour la seconde question, tu peux faire
Selection.Copy


peux-tu préciser ce que tu entends par "la prochaine cellule vide"?
est-ce, dans une colonne, ou une ligne, celle qui suit la dernière cellule remplie, ou bien as-tu des cellules vides au milieu?
ceci te sera peut-être utile: https://www.commentcamarche.net/faq/32220-vba-toutes-versions-detection-de-cellule-vide-ligne-colonne
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712
suggestion de code:
Option Explicit

Sub CopieColle()

'exemple d'utilisation de la fonction "FeuilleExiste"
Dim nomfeuille As String, feuille As Worksheet
nomfeuille = Sheets("Projet").Range("i1")
If Not Feuille_Existe(nomfeuille) Then
    Set feuille = Sheets.Add
    feuille.Name = nomfeuille
Else
    Set feuille = Sheets(nomfeuille)
End If
End With
Selection.Copy
feuille.Range("C6").PasteSpecial xlPasteValues
End Sub
Messages postés
17
Date d'inscription
vendredi 17 juillet 2020
Statut
Membre
Dernière intervention
28 août 2020

Merci des réponses rapides pas le temps de tester le code mais de repondre aux interrogations.

Je souhaite copier à la suite (en dessous) de la sélection que l'on vient de copier avec un écart de 1 a 2 ligne
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712
cela reste très flou, "en dessous de la sélection que l'on vient de copier avec un écart de 1 a 2 ligne".
tu ne montres qu'une seule copie, comment déterminer où la précédente a été faite?
comment décider si c'est une ou deux lignes?
que fait-on la première fois?
n'est-ce pas également juste en dessous de la dernière ligne remplie?
Messages postés
17
Date d'inscription
vendredi 17 juillet 2020
Statut
Membre
Dernière intervention
28 août 2020

Désolé, je n'ai pas tous les réflexes du langage vba (je débute) et je n'ai pas été assez explicite.

En effet le point de départ de la destinations de la 1ere copie n'a pas de préférence, comme il est indiqué sur le code range(c6) c'est très bien

Pour les autres copies effectivement il faut qu'à chaque fois le point de départ reste en colonne C, mais si la précédente copie faisait 16 ligne le point de départ serait range(c18), si la 2nde copie fait 30 lignes, la future copie commencerai en range(c50).. etc....
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712
ne peut-on pas simplement copier en dessous de la dernière ligne remplie?
Messages postés
17
Date d'inscription
vendredi 17 juillet 2020
Statut
Membre
Dernière intervention
28 août 2020

Non car en fonction du filtre ce sera un tableau différent. Le pourquoi du décalage à partir de la dernière ligne rempli
Messages postés
17
Date d'inscription
vendredi 17 juillet 2020
Statut
Membre
Dernière intervention
28 août 2020

Messages postés
17
Date d'inscription
vendredi 17 juillet 2020
Statut
Membre
Dernière intervention
28 août 2020

après test voici le code qui fonctionne avec le décalage de 2 cellules par rapport au dernière ligne remplie:

With Sheets(nomfeuille)
.Paste .Rows(.Cells(Rows.Count, 1).End(xlUp).Row + 3)
End With


le seul inconvénient c'est que ça colle par défaut en cellule range A, le must aurait été en colonne C, mais je ne maitrise pas suffisament le code je chercherais demain!!
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712
tu as répondu trois fois non quand je demandais si tu voulais copier en dessous de la dernière ligne remplie, c'est finalement oui? as-tu lu ma suggestion en #1?

je me demande si tu prends le temps de lire et de comprendre ce que nous t'écrivons.
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712 >
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020

peut-être:
.Paste .Cells(.Rows.Count, 3).End(xlUp).offset(2,0)
Messages postés
17
Date d'inscription
vendredi 17 juillet 2020
Statut
Membre
Dernière intervention
28 août 2020

Merci yg_be, tout marche parfaitement

Désolé si je n'ai pas été clair dans la demande! Je veillerai à être plus explicite ou mettrais le fichier en pj avec des exemple.

En tout cas merci du temps pris a me répondre
Messages postés
17
Date d'inscription
vendredi 17 juillet 2020
Statut
Membre
Dernière intervention
28 août 2020

Re,

ayant des formules dans mes plages de données a collé, j'ai rajouté une mention pastevalues afin d'avoir que les données pures:

.Cells(Rows.Count, 3).End(xlUp).Offset(4, 0).PasteSpecial Paste:=xlPasteValues