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 :

[VBA-E] - Utilisation d'une variable avec la propriete offset


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut [VBA-E] - Utilisation d'une variable avec la propriete offset
    Bonjour a tous,

    je cherche a faire un test sur toute une colonne mais dont l'indice peut changer.
    J'ai fait le code suivant:

    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
    For Each MyCell In Range("3:3")
        If MyCell.Value Like "*Wk*" & CurrentWeek + 2 Then
        Wk2 = MyCell.Column
            Exit For
        End If
    Next MyCell
     
    For Each MyCell In Columns(Wk2)
      If MyCell.Offset(0, 5 - Wk2) = "United Kingdom" Or MyCell.Offset(0, 5 - Wk2) = "UK" _
           And MyCell.Offset(0, 94) = "Compal" Then
            If MyCell.Offset(0, 102 - Wk2).Value Like "*Deal Sea*" Then
            QtyOptWk2_UKCompalSea = QtyOptWk2_UKCompalSea + MyCell.Offset(0, 11).Value
            Else
            QtyOptWk2_UKCompalAir = QtyOptWk2_UKCompalAir + MyCell.Offset(0, 11).Value
            End If
          End If
    Next MyCell
     
    Range("A1000").Value = QtyOptWk2_UKCompalAir
    Ca compile mais quand je run la macro, j'ai une erreur de type 13.
    Cela vient de la variable Wk2 qui pose pb a la propriete offset.

    Si quelq'un sait comment le gerer.

    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each MyCell In Columns(Wk2)
    VBA ne parcourt qu'une seule fois la boucle, car il n'y a q'une seule colonne. Ainsi MyCell est alors ici une colonne et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox MyCell.Offset(0, 5 - Wk2) = "United Kingdom"
    renvoie une erreur car tu compares une colonne à une chaîne de caractères.
    Il faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each MyCell In Columns(Wk2).Cells
    De même, il est mieux d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each MyCell In Range("3:3").Cells
    Rem. Si (If MyCell.Value Like "*Wk*" & CurrentWeek + 2 Then) est toujours faux, alors Wk2 sera surement égal à 0 (sauf s'il a été initialisé avant) et tu auras quand même une erreur

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Sur quelle ligne l'erreur ? Et il serait bien que tu indiques "incompatibilité de type" plutôt que erreur 13
    Maintenant, je ne comprends pas ta logique, là
    For Each MyCell In Columns(Wk2)
    If MyCell.Offset(0, 5 - Wk2) = ...
    pour "For Each MyCell In Columns(Wk2)" je comprends. Supposons que Wk2 = 12, on examine la colonne 12
    Et puis, " If MyCell.Offset(0, 5 - Wk2) = ..."
    Bon, finalement on vérifie la colonne 12 + 5 - 12 = 5
    Tu peux faire ça... Quant à moi, ça m'embrouillerait plutôt...

    Vérifie la valeur de Wk2 en sortie de boucle et donne-nous la ligne de ton erreur.
    A+

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    En fait je dois pour dabord reperer la colonne pour les commandes prevues en semaine +2.
    J'utilise le code suivant car l'indice de colonne peut varier ( le fichier etant mis a jour une fois par semaine)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For Each MyCell In Range("3:3")
        If MyCell.Value Like "*Wk*" & CurrentWeek + 2 Then
        Wk2 = MyCell.Column
            Exit For
        End If
    Next MyCell
    Ensuite, parmi ces commandes je dois faire differents tests pour sommer celles qui viennent d'un meme groupe de pays, sont expedies par mer ou air...
    Je vais chercher ces infos la sur d'autres colonnes mais sur la meme ligne que MyCell active d'ou l'idee du Offset.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For Each MyCell In Columns(Wk2)
      If MyCell.Offset(0, 5 - Wk2) = "United Kingdom" Or MyCell.Offset(0, 5 - Wk2) = "UK" _
           And MyCell.Offset(0, 94) = "Compal" Then
            If MyCell.Offset(0, 102 - Wk2).Value Like "*Deal Sea*" Then
            QtyOptWk2_UKCompalSea = QtyOptWk2_UKCompalSea + MyCell.Offset(0, 11).Value
            Else
            QtyOptWk2_UKCompalAir = QtyOptWk2_UKCompalAir + MyCell.Offset(0, 11).Value
            End If
          End If
    Next MyCell
    Le probleme vient du bout de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If MyCell.Offset(0, 5 - Wk2) = "United Kingdom" Or MyCell.Offset(0, 5 - Wk2) = "UK" _
           And MyCell.Offset(0, 94) = "Compal" Then
    En sortie de boucle Wk2 est egal a 31 ce qui est bien correct pour le fichier de cette semaine.

    Merci d'avance.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Regarde ce qu'a mis dadavyvy, et que je n'avais pas relevé
    For Each MyCell In Columns(Wk2).Cells
    Ensuite, tu dis
    En sortie de boucle Wk2 est egal a 31 ce qui est bien correct pour le fichier de cette semaine
    donc, d'une semaine sur l'autre, tes offset varient... Quel est le pb pour utiliser des variables ?
    A+

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    il a peut etre un probleme a dechifrer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    si (a ou b) et c
    et :
    si a ou (b et c)

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    Merci de vos reponses.
    Je vais tester et vous tiens informer si mon probleme est resolu.

Discussions similaires

  1. [VBA] Créer une variable avec VBA
    Par hiault dans le forum SDK
    Réponses: 3
    Dernier message: 21/09/2011, 13h55
  2. [XL-2003] VBA-Utilisation d'une variable booléenne et de sa valeur
    Par gwen.s dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/07/2010, 18h25
  3. [VBA-E]Recherche d'une valeur avec la colonne comme variable
    Par Corlo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/04/2007, 09h21
  4. Réponses: 7
    Dernier message: 13/03/2006, 15h39
  5. Utilisation d'une variable avec l'instruction 'USE'
    Par florantanplan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/11/2005, 10h39

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