Code VBA "court" pour redéfinir la dernière cellule active (utilisation SPECIALCELLS)

zebanx

XLDnaute Accro
Bonjour,

J'utilise un code un peu long pour redéfinir la dernière cellule active d'une feuille.

Auriez-vous svp un code ou des lignes de codes plus courtes pour obtenir un résultat identique ?

Ci-joint un fichier avec sur le code de "REMPLIR" la ligne volontairement suspendue qui ne permet pas de limiter le nombre de lignes mais compte le nombre de lignes supprimées avec utilisation dans le code de "specialcells" (si vous supprimez les 3 erreurs en orange de la colonne A svp).

Vous en remerciant, bonne soirée
zebanx

code :
Sub suppLigneVides()
With ActiveSheet.UsedRange
derLi = .Row + .Rows.Count - 1
End With
Application.ScreenUpdating = False
For r = derLi To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
With ActiveSheet.UsedRange
derLi = .Row + .Rows.Count - 1
End With
Application.ScreenUpdating = False
For r = derLi To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
End Sub
 

Pièces jointes

  • derligne_split-3 col-1.xls
    60 KB · Affichages: 24

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour zebanx,

Une autre façon de faire :
VB:
Sub splitderLig_2()
Dim separ$, j&, derligne&, T, i&, k&, vide As Boolean

   'recherche n° dernière ligne des colonnes 2 à 4 pour effacement
   derligne = 2
   For j = 2 To 4
      i = Cells(Rows.Count, j).End(xlUp).Row
      derligne = IIf(i > derligne, i, derligne)
   Next j
   Range("b2:d" & derligne).ClearContents

   'dernière ligne des données de la colonne A
   derligne = Range("A" & Rows.Count).End(xlUp).Row
   If derligne = 1 Then Exit Sub

   ' acquisition séparateur et veut-on remplir les cellules vides ?
   separ = InputBox("Entrez le séparateur SVP" & vbCrLf _
                    & "(pour remplir les colonnes suivantes)", "NomDeLafenêtre", "/")
   vide = MsgBox("Remplir les cellules vides ?", vbQuestion + vbYesNo + vbDefaultButton1) = vbYes
   Application.ScreenUpdating = False

   'remplissage des lignes
   For i = 2 To derligne
      T = Split(Cells(i, "a"), separ)
      'copier valeurs de T sur la ligne i
      For j = 0 To UBound(T): Cells(i, "b").Offset(, j) = Trim(T(j)): Next j
      'compléter les cellules vides avec la dernière valeur de T
      If vide And j > 0 Then
         For k = j To 2: Cells(i, "b").Offset(, k) = Trim(T(j - 1)): Next k
      End If
   Next i
End Sub
 

Pièces jointes

  • zebanx- derligne_split-3 col-1 -v1.xls
    39.5 KB · Affichages: 15

zebanx

XLDnaute Accro
Re- MaPomme

Merci pour cette réponse très détaillée.*

SpecialCells m'apparaissait comme la réponse la plus intuitive (sur la fin de code) mais ton code est intéressant pour, en particulier :
- aller rechercher la dernière valeur i sur les colonnes B et D avec une boucle. Je me demandais si ce n'était pas trop long mais il faut bien boucler sur chacune des trois colonnes pour aller rechercher la dernière ligne vide.
- sur le split final avec une double boucle (ligne et saut de colonne avec Ubound pour découper la cellule en colonne A). Une vraie simplification.

J'ai un petit fichier avec les codes sur une boucle pour réaliser ces splits.
Je ne pourrais pas tout changer d'un coup mais j'y complète ton code qui pourrait me servir, comme tous tes codes d'ailleurs, ultérieurement.

Bonne journée et encore merci.
++
zebanx.

*nb : La prochaine fois, je veillerai toutefois à te lister les parties mal comprises plutôt que de te faire retravailler (ce que je n'avais pas prévu) pour commenter le code complet.
Ta générosité / bienveillance (sans brossage, hein !) est déjà fort connue par tout ceux qui utilisent E.D. mais il n'y a aucune raison pour en abuser -) et te faire, dans le cas présent, un double travail.
 

Discussions similaires

Réponses
7
Affichages
319
Réponses
11
Affichages
431
Réponses
1
Affichages
444

Statistiques des forums

Discussions
312 184
Messages
2 086 008
Membres
103 088
dernier inscrit
Psodam