Tester contenu d'une cellule

RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009 - 21 juin 2007 à 09:09
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 21 juin 2007 à 13:57
Bonjour,

grâce à vb j'ouvre un fichier Excel et je voudrais compter le nombre de ligne non vides et m'arréter dès que je suis sur une cellule vide.

J'utilise deux codes :

Dim temp As Integer
temp = 0
Dim compteur As Integer  
compteur = 1
While temp= 0
     If ActiveSheet.Range("A" & temp) <> "" Then          -->  ERREUR il me dit "Variable objet ou variable bloc With non défini"
           temp = temp + 1
           compteur = compteur + 1
    Else
          temp = 1
    End If
Wend

Sinon j'utilise :

Dim temp As Integer
temp = 0
Dim compteur As Integer  
compteur = 1
While temp= 0
     If Cells(tmp, 1) <> "" Then          -->  ERREUR il me dit  "La méthode 'Cells' de l'objet '_Global' a échoué" 
           temp = temp + 1
           compteur = compteur + 1
    Else
          temp = 1
    End If
Wend

Peut-être ai-je oublié de mettre quelque chose ? Sinon n'existe t-il pas une autre méthode pour récupérer le contenu d'une cellule et le tester ?

Merci.

19 réponses

jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 09:12
Salut,
Pour la premiere méthode c'est normal
cartemp > donc ActiveSheet.Range("A" & temp) = ActiveSheet.Range("A0")
La cellule A0 n'existe PAS

Pour la seconde méthode, tu utilise subitement une variable tmp (et non temp)... donc 0 donc  cells(0,1) bah marche pas non plus

@+: Ju£i?n
Pensez: Réponse acceptée
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 09:17
Re,
Si tu essayais ce code:
Dim MRange As Range
   'selection la colonne A
   'de la feuille active
   ActiveSheet.Columns("A:A").Select
   'Pour chaque cellule de la selection
   For Each MRange In Selection
       'si la cellule est vide on sort de la boucle
       If IsEmpty(MRange) Then Exit For
   Next
   'on selectionne alors la cellule vide
   MRange.Select
   'on affiche la ligne correspondante
   MsgBox MRange.Row, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
21 juin 2007 à 09:17
En fait il faut remplacer "Cells(tmp, 1) " par "Cells(temp, 1)" et lors de l'initialisation, c'est compteur = 0 et temp = 1. 
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
21 juin 2007 à 09:25
Pourquoi tu poste dans le forum VB6 si tu fait du VBA ???

Je déplace vers le bon forum !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
21 juin 2007 à 09:50
Pour ActiveSheet.Columns("A:A").Select il me met encore variable objet ou bloc with non défini !
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 10:03
Salut,
Tu es sur que tu travaille directemtn sous Excel ou bien tu pilotes Excel depuis une appli VB6?

@+: Ju£i?n
Pensez: Réponse acceptée
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
21 juin 2007 à 10:16
Non j'ai dit que j'ouvrais mon fichier grâce à vb! Je veux donc que mon programme me dise combien j'ai de lignes non vides.

Mais à chaque fois il ne veut pas compiler à cause des Cells ou ActiveSheet! Il n'y a pas d'autres fonctions ?

Merci.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
21 juin 2007 à 10:18
Ok, j'ai mal lu, faut dire que ton code c'est du vba justement !

Les objets Cells et ActiveSheet ne sont pas des objets vb6 mais vba, tu ne peux pas les utiliser directement dans ton code vb ! Il te faut créer un objet excel !

Je redéplace ton post vers le forum vb6.
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 10:18
Salut,
Et bien dans ce cas montre le code te permettant d'ouvrir le fichier... on est pas devin

@+: Ju£i?n
Pensez: Réponse acceptée
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
21 juin 2007 à 10:22
Ok le voilà :

Dim fichier As String
fichier = File1.Path & "/" & File1.FileName
Dim excc As New Excel.Application
    excc.Visible = False                                            
    excc.Workbooks.Open (fichier) 

et là je fais mes tests!
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 10:25
Re,
Dans ce cas iul faut ajouter le nom de la variable de type Excel devant ActiveSheet Cell, devant les objet Excel.

Essaie alors

Dim MRange As Range
  'selection la colonne A
  'de la feuille active
  excc.ActiveSheet.Columns("A:A").Select
  'Pour chaque cellule de la selection
  For Each MRange In Selection
      'si la cellule est vide on sort de la boucle
      If IsEmpty(MRange) Then Exit For
  Next
  'on selectionne alors la cellule vide
  MRange.Select
  'on affiche la ligne correspondante
  MsgBox MRange.Row, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
21 juin 2007 à 10:39
Non ça ne marche pas mais ce n'est pas grave je vais faire autrement!

Sinon j'ai une autre question : j'ouvre mon premier fichier mais je veux le quitter et en ouvrir un autre! Le problème est que que mets excc1.Close (c'est mon deuxième fichier) et il se ferme alors que quand je mets excc.Close (c'est le premier fichier que j'ouvre) cela ne fonctionne pas! Et à la fin, comme j'enregistre un classeur que j'ai crée et bien lorsque je le lance j'ai également mon premier fichier excc qui s'ouvre aussi! Comment puis-je faire pour le quitter définitivement !

Merci.
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 10:45
Re,
C'est tout de bizarre que chez moi ca fonctionne et pas chez toi;.. enfin bref passons.

Tiens regarde ce code peu être pourras t il t'aider.
Dim fichier As String
fichier = File1.Path & "/" & File1.FileName
Dim excc As New Excel.Application
Dim Classeur1 As Workbook
Dim MRange As Range
   excc.Visible = False
   Set Classeur1 = excc.Workbooks.Open(fichier)
   
   'selection la colonne A
   'de la feuille active
   Classeur1.ActiveSheet.Columns("A:A").Select
   'Pour chaque cellule de la selection
   For Each MRange In Selection
       'si la cellule est vide on sort de la boucle
       If IsEmpty(MRange) Then Exit For
   Next
   'on selectionne alors la cellule vide
   Call MRange.Select
   'on affiche la ligne correspondante
   Call MsgBox(MRange.Row)
   'LES MODIFICAITONS
   'Quand tu veux fermer le classeur (TRUE = Sauver)
   Call Classeur1.Close(True)
   'Si tu VExu Quitter l'appli Excel
   excc.Quit, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
21 juin 2007 à 11:56
Bon j'arrive à quitter mon aplli. Excel ! Mais concernant le test de la valeur des cellules ce n'est pas encore ça !

Je voudrais essayer une autre méthode mais là encore j'ai les mêmes messages d'erreur :

Dim tmp As Integer
Dim tb(1000) As String
Dim compteur As Integer
compteur = 0
For tmp = 1 To 1000
      tb(compteur) = Cells(tmp, 1)
      compteur = compteur + 1
Next

Je veux mettre le contenu de ma colonne A dans un tableau mais il ne veut pas!

Merci !
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 12:24
Salut,
Mais ca ne veut rien dire "il ne veut pas"
Si tu te servais de ce que l'on t'a proposé avant c'est à dire un truc du style:

Dim tmp As Integer
Dim tb(1000) As String
Dim compteur As Integer
compteur = 0
For tmp = 1 To 1000
     tb(compteur) = Classeur1.ActveSheet.Cells(tmp, 1)
     compteur = compteur + 1
Next, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
21 juin 2007 à 12:48
Salut,

ok pour ce que tu m'a dit Julien!

Maintenant si quelqu'un pouvait m'expliquer pourquoi cela ne marche pas :

Dim exc As New Excel.Application
    exc.Visible = False                                             
    exc.Workbooks.Open (File1.Path & "/" & File1.FileName) 

...
exc.Quit

Dim Exc1 As  New Excel.Application
exc1.Visible = False                                             
exc1.Workbooks.Open (File1.Path & "/" & File2.FileName)

...
exc1.Quit

ActiveWorkbook.SaveAs FileName:=Dir2.Path & "" & Text1.Text & ".xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
 ActiveWorkbook.Close

Pourquoi lorsque j'ouvre ma sauvegarde le premier fichier à savoir exc s'ouvre également ?

Merci.
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 13:01
Salut,

ATTENTION exc n'est pas un fichier mais une application Excel, il est d'ailleurs INUTILE de la fermer pour en rouvrir une autre.
Ouvre une seule Instance Excel.application, puis travailles sur sa collection WorkBooks.

Il faut utiliser les Methodes fournies pour Workbooks, .Save,et Close.

@+: Ju£i?n
Pensez: Réponse acceptée
0
RS8 Messages postés 100 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 15 juillet 2009
21 juin 2007 à 13:32
Ok nickel ça marche!
Merci pour ton aide Julien

Bonne journée.
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 juin 2007 à 13:57
Salutn
Si tu estimes que ton problème est résolu, pense à appuyer sur réponse acceptée sur le ou les posts qui t'on aide à avancer.

@+: Ju£i?n
Pensez: Réponse acceptée
0