Copier sur prochaine cellule vide

Résolu
Tikazor -  
 Tikazor -
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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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://forums.commentcamarche.net/forum/affich-37622001-vba-detection-de-cellule-vide-ligne-colonnne
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
      
      0
  2. Tikazor
     
    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
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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?
      0
  3. Tikazor
     
    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....
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      ne peut-on pas simplement copier en dessous de la dernière ligne remplie?
      0
  4. Tikazor
     
    Non car en fonction du filtre ce sera un tableau différent. Le pourquoi du décalage à partir de la dernière ligne rempli
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Tikazor
     
    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!!
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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.
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        peut-être:
        .Paste .Cells(.Rows.Count, 3).End(xlUp).offset(2,0)
        0
  7. Tikazor
     
    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
    0
  8. Tikazor
     
    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
    0