Vba dernière cellule non vide (Ignorer les formules résultat "")
djidji094
Messages postés3Date d'inscriptionmercredi 18 décembre 2013StatutMembreDernière intervention19 décembre 2013
-
Modifié par djidji094 le 19/12/2013 à 00:35
djidji094
Messages postés3Date d'inscriptionmercredi 18 décembre 2013StatutMembreDernière intervention19 décembre 2013
-
19 déc. 2013 à 17:49
Bonjour à tous
C'est mon premier post sur votre site. Excusez moi si je suis un peu long.
Tout d'abord j'aimerais vous faire parvenir le tableau excel utilisé lors de la rédaction de ma question !
J'ai réalisé ce tableau de classement (9 vins dégustés), dernièrement. Après notation un "classement podium" s'effectue.
Le défis est d'inscrire dans une cellule (C18) le nom de l'antépénultième "Cru" (avant-avant-dernier).
Problème du code : Les cellules AJ14 à AJ16, bien que vides, ne sont pas reconnues comme telles !
La macro inscrit bien "Antépénultième" 2 cellules au dessus mais par rapport à la dernière cellule copiée et non par rapport à la dernière cellule non vide !
Macro copiage cellules classement final B5:B16 (avec formule) et collage spécial des valeurs dans AJ5:AJ16. Sélection de la dernière cellule non vide et inscription 2 cellules + haut d'Antépénultième".
Sub Antepenultieme()
'Création tableau "Antépénultième"
Range("B5:B16").Copy 'copie des cellules avec formule
jordane45
Messages postés38241Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 septembre 2024345 19 déc. 2013 à 00:53
Bonjour,
Essaye ça :
Sub Antepenultieme()
'Création tableau "Antépénultième"
Range("B5:B16").Copy 'copie des cellules avec formule
Range("AJ5").Select 'collage spécial valeurs seules
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=True, Transpose:=False
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Range("AJ" & Derniere_Ligne).End(xlUp).Offset(-2).Select 'selection cellule -2 vers le haut
ActiveCell.FormulaR1C1 = "Antépénultième" 'Inscription antépénultième dans la sélection
End Sub
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018209 19 déc. 2013 à 10:38
Bonjour,
On peut également raisonner différemment.
Dès lors que ton paste ne prend que les valeurs (oubliées, donc, les formules) ===>> on peut travailler avec les cellules qio ne contiennent que des constantes.
Un petit exemple/test pour le montrer :
en colonne B, des formules de ton choix, la colonne A étant vide
Range("B5:B16").Copy Range("A5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=True, Transpose:=False With Range("A1:A" & Rows.Count).SpecialCells(xlCellTypeConstants) With .Areas(.Areas.Count) Range("B" & .Row + .Rows.Count - 3).Value = "antepénultième" End With End With
djidji094
Messages postés3Date d'inscriptionmercredi 18 décembre 2013StatutMembreDernière intervention19 décembre 2013 19 déc. 2013 à 16:36
Bonjour
Merci jordane45 et ucfoutu pour vos propositions.
Tout comme ma macro vos codes se basent sur la dernière cellule « AJ16 » copiée et collée (valeur uniquement) puis sélection de la 2e cellule « AJ14 » au dessus. Dans ce cas précis les cellules AJ14 à AJ16 sont collée vides, mais vues comme non vides.
Pour rappel : Copie cellules B5 : B16 [ou B5 =SI(D5=0;"";"1er")) --- (B16 =SI(D16=0;"";"12e")]
Collage spécial valeur dans AJ5 :AJ16 (dans mon exemple les cellules B14 à B16 retournent 0 donc VIDE). Après collage en AJ5 :AJ16 les 3 dernières cellules sont donc bien VIDES.
La macro ne les considère pas comme vides mais comme les 3 dernières cellules du tableau copié et la sélection (dernière cellule non vide) se fait à partir de la cellule AJ16 ! La suite fonctionne bien en sélectionnant la 2e cellule supérieure mais le point de départ du comptage n'est pas le bon.
Compliqué n'est-il pas ?!
jordane45
Messages postés38241Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 septembre 2024345 19 déc. 2013 à 16:54
ce qu'on te donne c'est la dernière ligne NON VIDE.. mais si dans une de tes colonne tu as des données jusqu'en (par exemple) F222... mais que dans ta colonne J tu t'arrêtes à la ligne 55... le numéro de la dernière ligne reste 222......
djidji094
Messages postés3Date d'inscriptionmercredi 18 décembre 2013StatutMembreDernière intervention19 décembre 2013 19 déc. 2013 à 17:49
Re-Bonjour
J'ai pigé ! On travaille sur la dernière ligne non vide du tableau. J'ai fais la manip en supprimant les lignes 15 et 16 et effectivement la sélection se fait bien à partir de la ligne 14 (donc sélection de AJ12). Cette façon de faire n'est donc pas la bonne et ne peut fonctionner !
Le nombre des valeurs non vides des cellules B5 :B16 peut-être différent d'une séance de « beuverie » à l'autre :-). Y-aurait-il une solution en sélectionnant les cellules non vides en partant de la cellule B5 et en descendant vers l'ultime possibilité de cellule non vide qu'est la B16 ?
Par ex : B5 à B9 non vides et B10 à B16 renvoient « vide ». Donc descendre jusqu'à B9 et remonter de 2 c-à-d B7 !