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

Messages postés
3
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
4 juin 2009
- - Dernière réponse : sbertrand13
Messages postés
3
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
4 juin 2009
- 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 

4 réponses

Meilleure réponse
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 198 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cnt
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010
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
Messages postés
3
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
4 juin 2009
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
Messages postés
3
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
4 juin 2009
0
Merci
Ca marche très bien. Merci. A plus.
Commenter la réponse de sbertrand13