sbertrand13
Messages postés3Date d'inscriptionmercredi 3 juin 2009StatutMembreDernière intervention 4 juin 2009
-
3 juin 2009 à 09:49
sbertrand13
Messages postés3Date d'inscriptionmercredi 3 juin 2009StatutMembreDerniè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,
A voir également:
Copier une plage de cellules des lignes remplies selon une condition
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 20101 3 juin 2009 à 16:57
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
sbertrand13
Messages postés3Date d'inscriptionmercredi 3 juin 2009StatutMembreDernière intervention 4 juin 2009 4 juin 2009 à 10:51
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"