Copier une plage de cellules des lignes remplies selon une condition [Résolu]

sbertrand13 3 Messages postés mercredi 3 juin 2009Date d'inscription 4 juin 2009 Dernière intervention - 3 juin 2009 à 09:49 - Dernière réponse : sbertrand13 3 Messages postés mercredi 3 juin 2009Date d'inscription 4 juin 2009 Dernière intervention
- 4 juin 2009 à 14:17
Bonjour,

Après avoir cherché une journée sur internet, je me décide à faire appel à vous. J'ai trouvé un code qui me permettait de copier des lignes de cellule sous condition d'une feuille vers une autre. Voici ce code:

Sub selection()
 
  Dim Lig     As Long
  Dim Col     As String
  Dim NbrLig  As Long
  Dim NumLig  As Long
 
  Sheets("Sheet2").Activate                                     ' feuille de destination
 
  Col = "AE"                                                           ' colonne données non vides à tester'  NumLig 1                                                         'alors là ca doit etre le N° de la 1er ligne de données en comptant la ligne 1 0 .... ? '
  With Sheets("Incoming SICMA")                         ' feuille source'
  NbrLig = .Cells(65536, Col).End(xlUp).Row
  For Lig = 2 To NbrLig                                         'n° de la 1ere ligne de données'
    If .Cells(Lig, Col).VALUE <> 0 Then
      .Cells(Lig, Col).EntireRow.Copy
      NumLig = NumLig + 1
      Sheets("Sheet2").Cells(NumLig, 1).Insert Shift:=xlDown
                                                                             'ici pour insérer ou  .Paste pour coller'
    End If
  Next
  End With
End Sub

J'aimerai maintenant ne copier que les cellules des colonnes A, B et AE des lignes concernées.

Ex pour la ligne 2: si la cellule AE2 n'est pas nulle, copie les cellules A2, B2 et AE2 et copie les sur une autre feuille en A1, B1 et C1.

Si c'est possible d'expliquer ligne par ligne les lignes de code, ce serait vraiment génial pour apprendre de nouvelles connaissances ;)

Merci d'avance,
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
cnt 219 Messages postés lundi 21 novembre 2005Date d'inscription 20 décembre 2010 Dernière intervention - 4 juin 2009 à 12:36
3
Merci
salut
pour ne coller que les valeurs il faut utiliser l'argument "xlPasteValues"

            'ici pour PasteSpecial pour coller
Sheets("Sheet2").Cells(NumLig, 1).PasteSpecial xlPasteValues

CNTJC

Merci cnt 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cnt
cnt 219 Messages postés lundi 21 novembre 2005Date d'inscription 20 décembre 2010 Dernière intervention - 3 juin 2009 à 16:57
0
Merci
Salut
Cela répont-il à ton problème?

Sub CopieCellulesNonVides()
    Dim Plage As Range, cellule As Range, Colon As Integer, i As Integer
   
    ' Colonne pour condition
    Colon = Range("AC3").Column
   
    ' Plage(Range) de test de la condition
    Set Plage = Range(Cells(1, Colon).End(xlDown), Cells(65536, Colon).End(xlUp))
   
    'boucle pour chaque cellule de la Plage
    For Each cellule In Plage
   
        ' Test ==> cellule non vide
        If Not IsEmpty(c) Then
       
            ' i ==> ligne dans autre feuille
            i = i + 1
           
            ' affectations des valeurs
            Sheets(2).Cells(i, 1) = Cells(cellule.Row, 1)
            Sheets(2).Cells(i, 2) = Cells(cellule.Row, 2)
            Sheets(2).Cells(i, 3) = Cells(cellule.Row, Colon)
        End If
    Next
End Sub
Commenter la réponse de cnt
sbertrand13 3 Messages postés mercredi 3 juin 2009Date d'inscription 4 juin 2009 Dernière intervention - 4 juin 2009 à 10:51
0
Merci
Bonjour,

Merci pour ta réponse. Elle m'a permis de faire évoluer mon code et d'arriver à ce que je voulais. Toutefois, j'ai un nouveau problème. Les cellules que je copie sont des formules. Je n'aimerai récupérer que la valeur. Voici mon nouveau code:

Sub selection()
 
  Dim Lig     As Long
  Dim Col     As String
  Dim NbrLig  As Long
  Dim NumLig  As Long
 
  Sheets("Sheet2").Activate ' feuille de destination
 
  Col = "AE"                 ' colonne données non vides à tester'  NumLig 1          'alors là ca doit etre le N° de la 1er ligne de données en comptant la ligne 1 0 .... ? '
  With Sheets("Incoming SICMA")     ' feuille source'
  NbrLig = .Cells(65536, Col).End(xlUp).Row
  For Lig = 2 To NbrLig             'n° de la 1ere ligne de données'
    If .Cells(Lig, Col).VALUE <> 0 Then
      .Cells(Lig, 1).Copy
      NumLig = NumLig + 1
      Sheets("Sheet2").Cells(NumLig, 1).Insert Shift:=xlDown
            'ici pour insérer ou  .Paste pour coller'
      .Cells(Lig, 2).Copy
      Sheets("Sheet2").Cells(NumLig, 2).Insert Shift:=xlDown
      .Cells(Lig, 31).Copy
      Sheets("Sheet2").Cells(NumLig, 3).Insert Shift:=xlDown
    End If
  Next
  End With
End Sub

J'ai essayer de changer la ligne rouge en ".Cells(Lig,1).Value.copy" pour n'enregistrer que la valeur mais le débogueur me fait part d'une erreur 9 : "Subscript out of range"

Quelqu'un peut-il m'aider? Merci.
Commenter la réponse de sbertrand13
sbertrand13 3 Messages postés mercredi 3 juin 2009Date d'inscription 4 juin 2009 Dernière intervention - 4 juin 2009 à 14:17
0
Merci
Ca marche très bien. Merci. A plus.
Commenter la réponse de sbertrand13

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.