Vérifier valeurs dans 2 colonnes pour selection C/C
WhiteCthulhu
-
Modifié par WhiteCthulhu le 24/09/2013 à 12:32
WhiteCthulhu -
24 sept. 2013 à 16:03
Bonjour à tous,
Je cherche à rentrer un code permettant de ne copier/coller que les lignes d'un tableau dont les valeurs en colonnes Y et/ou AA ne sont pas vide.
Voici le code, je sais qu'il n'est pas propre ni efficace étant donné que c'est un mix entre de la macro auto, du code récupéré à droite à gauche et une dose d'initiative personnelle (inutile de préciser que je suis une buse en VBA!)
Pour le moment le code ne marche pas si il n'y a que des valeurs en colonne Y. Dès que je rajoute une valeur n'importe ou en colonne AA il marche par contre.
Sub CC
Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long
Sheets("TEMPPASTE").Activate ' feuille de destination
Col = "Y" 'colonne de la donnée non vide à tester
Col2 = "AA" 'colonne de la donnée non vide à tester
NumLig = 1 'espace volontaire en haut de feuille
With Sheets("Feuil1") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row
NbrLig = .Cells(65536, Col2).End(xlUp).Row
For Lig = 15 To NbrLig
If .Cells(Lig, Col).Value <> "" Or .Cells(Lig, Col2).Value <> "" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Cells(NumLig, 1).Select
Cells(NumLig, 2).Select
ActiveSheet.Paste
End sub
J'attends vos réactions horrifiées et peut être une réponse pouvant m'aider ;)
Merci
NB: Cas de figure possible :
- valeurs qu'en colonne Y
- valeurs qu'en colonne AA
- valeurs en colonne Y et AA sur la même ligne
- Valeur en colonne Y et AA sur des lignes différentes
- Zone vide entre 2 lignes avec valeur en Y et/ou AA (je peux avoir une valeur en Y et/ou AA sur ma première ligne de tableau et une suivante 10 lignes plus bas)
A voir également:
Vérifier valeurs dans 2 colonnes pour selection C/C
Bonjour,
Question de logique (rien à voir avec le développement) ===>>
interroge-toi sur le sens ce ce "Or" (qui veut dire "ou") et du "<>" (qui veut dire "différent") dans cette ligne de ton code :
If .Cells(Lig, Col).Value <> "" Or .Cells(Lig, Col2).Value <> "" Then
qui dit le contraire de ce que tu veux dire !
En d'autres termes : traduis (en langage naturel, sans développement) cette ligne et constate : correspond-elle vraiment à ce que tu dis vouloir ? Je ne le crois pas.
Alors ?
Si valeur en colonne Y différent de null OU valeur en colonne AA différent de null alors copier ligne...
Je ne comprends pas où je me contredis étant donné que je veux uniquement les lignes où il y a des valeurs en Y et/ou en AA .
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 24 sept. 2013 à 14:38
1) Null ? Null n'est pas ""
2) Et/ou n'estr pas OU
3) nbrlig ne peut avoir deux valeurs (sinon, c'est seule la seconde qui prévaut).
Si tu cherches à savoir si a ou b sont non vides :
si a & b <> ""
Si tu cherches à savoir si a et b sont non vides :
si a <> "" et b <> ""
4) (mais cela n'a rien à voir) : je ne vois pas à quoi te sert numlig.
5) dans :
Cells(NumLig, 1).Select
Cells(NumLig, 2).Select
seul le dernier des deux prévaut !
1) désolé je veux juste dire vide
2) je veux une valeur en Y ET/OU en AA donc pas de valeur en Y ET AA
3) Comme dis dans l'explication de mon problème c'est bien l'option n°1
4) Moi non plus
5) cf 4)
6) Auriez vous une réponse à mon problème ou allez vous juste pointer tout les soucis de formulation ou de jargon VBA, réaction que j'ai d'ailleurs tenté d'endiguer en prévenant dans l'énoncé de la médiocrité de mon code compte tenu de mon ignorance dans ce domaine!
note: Je prends très bien la critique si elle est constructive, en l'occurrence je reconnais volontiers que mon code doit comporter des erreurs ou des commandes inutiles. Néanmoins il marche dans la majorité des cas auxquels je l'ai soumis, son seul soucis de fonctionnement apparait dans le cas où je n'ai pas au minimum une cellule avec une valeur en colonne AA.
Bon j'ai finalement trouvé quelque chose de peut être aussi bancal mais qui semble marcher pour le moment :
Sub CC2()
Dim r As Long, endRow As Long, pasteRowIndex As Long
Set WS = Worksheets("Feuil1")
With WS
Set LastCell = .Cells(.Rows.Count, "y").End(xlUp)
LastCellRowNumber = LastCell.Row
End With
pasteRowIndex = 1
For r = 15 To LastCellRowNumber 'début du crawl
If (Cells(r, Columns("Y").Column).Value) <> "" Or (Cells(r, Columns("AA").Column).Value) <> "" Then '
Rows(r).Select
Selection.Copy
Sheets("TEMPPASTE").Select
Rows(pasteRowIndex).Select
ActiveSheet.Paste
pasteRowIndex = pasteRowIndex + 1
Sheets("feuil1").Select
End If
Next r
Sheets("TEMPPASTE").Select
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft
Cells.Select
Selection.RowHeight = 13.5
End Sub
Modifié par WhiteCthulhu le 24/09/2013 à 13:43
Je veux dire :
Si valeur en colonne Y différent de null OU valeur en colonne AA différent de null alors copier ligne...
Je ne comprends pas où je me contredis étant donné que je veux uniquement les lignes où il y a des valeurs en Y et/ou en AA .
24 sept. 2013 à 14:38
2) Et/ou n'estr pas OU
3) nbrlig ne peut avoir deux valeurs (sinon, c'est seule la seconde qui prévaut).
Si tu cherches à savoir si a ou b sont non vides :
si a & b <> ""
Si tu cherches à savoir si a et b sont non vides :
si a <> "" et b <> ""
4) (mais cela n'a rien à voir) : je ne vois pas à quoi te sert numlig.
5) dans :
Cells(NumLig, 1).Select
Cells(NumLig, 2).Select
seul le dernier des deux prévaut !
Modifié par WhiteCthulhu le 24/09/2013 à 15:20
2) je veux une valeur en Y ET/OU en AA donc pas de valeur en Y ET AA
3) Comme dis dans l'explication de mon problème c'est bien l'option n°1
4) Moi non plus
5) cf 4)
6) Auriez vous une réponse à mon problème ou allez vous juste pointer tout les soucis de formulation ou de jargon VBA, réaction que j'ai d'ailleurs tenté d'endiguer en prévenant dans l'énoncé de la médiocrité de mon code compte tenu de mon ignorance dans ce domaine!
note: Je prends très bien la critique si elle est constructive, en l'occurrence je reconnais volontiers que mon code doit comporter des erreurs ou des commandes inutiles. Néanmoins il marche dans la majorité des cas auxquels je l'ai soumis, son seul soucis de fonctionnement apparait dans le cas où je n'ai pas au minimum une cellule avec une valeur en colonne AA.
Cordialement
Modifié par WhiteCthulhu le 24/09/2013 à 16:06