derniere ligne vide et sans formule

erics83

XLDnaute Impliqué
Bonjour,

J'ai un classeur, dans la colonne A, j'ai des formules matricielles, faisant référence à un autre classeur (fermé). La formule rapatrie les valeurs. Si les valeurs sont vides, cela affiche 0 ou "vide" (en utilisant les outils décoché valeur =0).
Par contre, si je fais
Code:
for each c in sheets("bd").range("A1:A20000").end(xlup).row
J'ai comme résultat erreur, car le code prend jusqu'à la dernière ligne (avec formule, soit 20000), alors que mes valeurs dans "bd" ne vont que jusqu'à 1000 (rapatriement du classeur fermé)

J'ai un message d'erreur 2042, car C est en erreur (lorsqu'il lit les 20000 lignes, 19000 sont donc à 0).

Donc comment faire pour lire uniquement les valeurs de la colonne A (sans passer par un
Code:
for i = 1 to sheets("bd").range("A65536).end(xlup).row
if i = 0 then stop
.....

En vous remerciant pour votre aide,
 
Dernière édition:

PMO2

XLDnaute Accro
Re : derniere ligne vide et sans formule

Bonjour,

Peut être une piste avec le classeur exemple joint.

Le code est
Code:
Sub aa()
Dim S As Worksheet
Dim R As Range
Dim C As Range
Dim A$
Dim i&
Dim T()
Dim cpt&  'compteur
'---
Set R = ActiveSheet.Columns("a:a").SpecialCells(xlCellTypeConstants)

'######################################
'### Soit on stocke dans une chaîne ###
'######################################
For Each C In R
  A$ = A$ & C & vbLf
Next C
'--- Lecture ---
MsgBox A$, , "Dans une chaîne"

'######################################################
'### Soit on stocke dans un tableau à une dimension ###
'######################################################
For Each C In R
  cpt& = cpt& + 1
  ReDim Preserve T(1 To cpt&)
  T(cpt&) = C
Next C
'--- Lecture ---
For i& = 1 To UBound(T)
  MsgBox T(i&), , "Elément tableau " & i&
Next i&

'##############################
'### Soit on stocke dans un ###
'### tableau à 2 dimensions ###
'##############################
Erase T
cpt& = 0
For Each C In R
  cpt& = cpt& + 1
  ReDim Preserve T(1 To 1, 1 To cpt&)
  T(1, cpt&) = C
Next C
'--- Inscription dans une nouvelle feuille (pour visualiser) ---
Set S = Sheets.Add
Set R = S.Range(S.Cells(1, 1), S.Cells(UBound(T, 2), 1))
R = Application.WorksheetFunction.Transpose(T)
MsgBox "Inscription dans une nouvelle feuille (pour visualiser)"
End Sub

Il permet de visualiser 3 démarches (à vous de choisir celle qui vous intéresse)
1) Une chaîne
2) Un tableau à une dimension
3) Un tableau à 2 dimensions qui permet son inscription directe dans une autre feuille
 

Pièces jointes

  • Piste pour erics83.xlsm
    16.1 KB · Affichages: 28

Discussions similaires

Réponses
4
Affichages
231

Statistiques des forums

Discussions
312 396
Messages
2 088 054
Membres
103 709
dernier inscrit
FrrankX