Vba dernière cellule non vide (Ignorer les formules résultat "")

Signaler
Messages postés
3
Date d'inscription
mercredi 18 décembre 2013
Statut
Membre
Dernière intervention
19 décembre 2013
-
Messages postés
3
Date d'inscription
mercredi 18 décembre 2013
Statut
Membre
Dernière intervention
19 décembre 2013
-
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

Range("AJ5").Select 'collage spécial valeurs seules
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=True, Transpose:=False

Range("AJ" & Rows.Count).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

Merci sincèrement de votre aide

4 réponses

Messages postés
29734
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
338
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 


Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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
Lance et regarde ce qui va se passer.
Messages postés
3
Date d'inscription
mercredi 18 décembre 2013
Statut
Membre
Dernière intervention
19 décembre 2013

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 ?!
Messages postés
29734
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
338
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......
Messages postés
3
Date d'inscription
mercredi 18 décembre 2013
Statut
Membre
Dernière intervention
19 décembre 2013

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 !