IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Probleme de boucle For Each [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Probleme de boucle For Each
    Bonjour a tous.

    Je suis debutante en VBA excel. J'essai de lire les tutoriaux et differentes discussions de ce site pour avancer et cela m'aide enormement; donc merci a tous d'etre la.

    Mon souci majeur en ce moment, c'est que les boucles For each ne fonctionnent pas chez moi. Je croyais au depart que c'etait un probleme d'ordinateur, mais la je suis sur un autre ordinateur et je recois tjr le meme message d'erreur quand j'arrive a cette ligne :

    RUN TIME-ERROR '438'
    OBJECT DOES'T SUPPORT THIS PROPERTY OR METHOD

    Y a t-il qqch a activer ou que j'ai desactive par erreur? ya t-il une solution de rechange pour verifier le contenu de toutes les cellules contenues dans une plage?

    j'ai verifier la syntaxe avec l'aide VBA et les differents forums et tout semble ok. voici mon code au cas ou j'aurais rate qqch :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub SummaryCopie()
     
    Dim wb(3) As Workbook
    Dim ws(5) As Worksheet
    Dim cel(5) As Range
    Dim cell As Range
     
    Set wb(1) = Workbooks("daily evolution RS KPI BH-" & Format(Date - 1, "[$-409]mmmm d, yyyy;@") & ".xlsx")
    Set wb(2) = Workbooks("Daily report evolution of main KPI BH-2009.xlsx")
    Set ws(1) = wb(1).Sheets("summary BH")
    Set ws(2) = wb(2).Sheets("summary BH")
     
    wb(2).Activate
    ws(2).Select
    set cel(1)= ws(2).range("a:a")
     
    For Each cell In cel(1)
        If cell.Formula = Date - 1 Then
            R = cell.Row
            c = cell.Column
        End If
    Next cell
     
    cel(1) = Range("a" & CStr(R) & ":i" & CStr(R))
    end sub
    NB : j'utilise EXCEL 2007 et l'office est installe en anglais

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Essaye comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For Each cell In cel(1)
    If cell.Formula = Date - 1 Then
    R = cell.Row
    c = cell.Column
    End If
    Next

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    A mon avis, il manque un bout du style


  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Soyez bénis!!!
    Merci les gars, je n'ai plus le message d'erreur. c'est curieux car j'avais essayé avec et sans le cel(1) après Next. Anyway, ça passe et c'est l'essentiel. Thanks encore.

    Par contre, ma variable R reste à 0 et C est vide alors qu'il y a bien la date d'hier parmi les cellules scrutées et qu'elle est reconnue comme telle. En faisant le pas à pas, je me rend compte qu'il prends la valeur de la date (ex: 39390). Comment associer cela aux dates usuelles que j'utilise càd mm/JJ/YYYY (système anglo-saxon) ?

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Pour ce qui est de la date tu as Cdate, attention toutefois aux paramètres de ton pc.

    Citation Envoyé par Aide Excel
    Par exemple, #12/31/92# est le littéral date représentant le 31 décembre 1992 si le paramètre régional de votre application est Anglais (États-Unis).
    Si c'est bien le cas tu notes
    Tu peux également tester si la valeur représente bien une date en utilisant IsDate
    Dans ton cas, en admettant que la case contiendra toujours une donnée date valide(pas d'utilisation de IsDate)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CDate(cell.value2) = Date - 1 Then
    pour le code
    Ici c'est bizarre que tu n'es pas une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cel(1) = Range("a" & CStr(R) & ":i" & CStr(R))
    Je pense qu'il manque Set
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set cel(1) = Range("a" & CStr(R) & ":i" & CStr(R))
    et pour ma part j'utiliserais plutot Cells
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set cel(1) = range(cells(r,"A"),cells(r,"I"))
    j'ai deja eu des soucis avec le CStr qui me rajouter un caractère vide...
    Attention aussi a l'utilisation de Range et Cells sans preciser le classeur a utiliser... il prend le classeur actif dans un tel cas, le mieux et de preciser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws(1).range(ws(1).cells(....))
    Une chose que je ne comprend pas, mais on a qu'une partie du code, je suppose que c'est dut a cela, pourquoi déclarer un tableau de range ? cel(5) ?

    A++
    Qwaz

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Merci Owarzety
    Trop : ça marche.

    Il y avait efectivement un set qui manquait mais comme je butais sur le code du dessus, je m'en étais pas rendu compte. Pour ce qui est du tableau, je l'ai déclaré à titre préventif. c'est un long programme que j'écris petit à petit et qui va jongler entre plusieurs fichiers et les feuilles de ces fichiers, avec bcp de copier-coller en perspective. comme je suis débutante et que je tatonne un peu, g déclaré le max possible et je vais réajuster cela une fois le programme fini.

    Juste pour info, c quoi la différence entre cell.value et cell.value2?

    Merci encore et bonne journée!!!

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Yop

    Citation Envoyé par FI sur Value2
    La seule différence existant entre cette propriété et la propriété Value réside dans le fait que la propriété Value2 n'utilise pas les types de données aux formats Monétaire et Date. Vous pouvez renvoyer des données de ce type sous forme de nombres à virgule flottante en utilisant le type de données Double.
    Value tient compte du formatage de ta cellule (dans le cas d'une date ou d'une somme monétaire, alors que value2 renvoie la valeur numeric ex :
    si .value renvoie "01/05/1980 16:45" (cellule contenant un format date heure), .Value2 lui retournera 29256,756 (je met une valeur bidon hein ) et ce pour la même cellule.

    A++
    Qwaz

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Compris!
    Ok, retenu. Merci encore et bonne semaine

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Si tu as la réponse a ta question, penses au tag
    ++
    Qwaz

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme bouton afficher/masquer avec boucle for-each
    Par CouicCouic dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 25/11/2011, 09h48
  2. [XL-2007] Probleme boucle For each
    Par franc83 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/07/2011, 19h42
  3. Probleme VBS et boucle For each + tableau
    Par fas3r dans le forum Windows
    Réponses: 0
    Dernier message: 26/02/2008, 04h00
  4. Probleme boucle For Each controls
    Par Tusbar dans le forum Windows Forms
    Réponses: 21
    Dernier message: 14/09/2007, 00h56
  5. [C#] Probleme de boucle for et random
    Par Freeman166 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 09/01/2005, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo