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 :

L'utilisation d'une variable dans une formule est-elle bloquante


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut L'utilisation d'une variable dans une formule est-elle bloquante
    Bonjour,

    J'ai une macro dans laquelle je concatène 7 cellules dans un onglet qui est une table de référence et dans un autre onglet dans lequel les utilisateurs finaux viennent coller leurs données contenant les 7 même cellules à vérifier. J'arrive à faire la première partie de ma macro, à savoir concaténer des deux côtés mes 7 cellules. Mon objectif maintenant est d'indiquer dans la dernière colonne de mon fichier de vérification une colonne avec une formule de rechechev basée sur mon premier onglet. Comme les données collées par les utilisteurs finaux ne sont pas identiques, j'ai dimensionner "ColGap", qui correspond à l'entier égal au nombre de colonnes qui sépare la dernière colonne de celle concaténant mes 7 dimensions. J'espère être clair. e vous colle le code, sachant qu'il bloque sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Formula = "=IF(ISERROR(VLOOKUP(RC[-ColGap],'Data Base'!C1,1,0)),""A vérifier"",""OK"")"
    Avec pour message "Application-defined or object-defined error"

    Voilà le code en entier :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub Compare_data()
     
    Dim LRDB1 As Long
    Dim StartRange As Range, ColToInsert As Byte, LastColumn As Byte, ColGap As Byte, FirstRow As Integer, LastRow As Long
     
    Application.ScreenUpdating = False
     
    'Concaténer les 7 dimensions analytiques en colonne A
     
        With Sheets("Data Base")
     
        LRDB1 = .Range("A" & .Rows.Count).End(xlUp).Row
     
        .Range("A1").EntireColumn.Insert
     
            With .Range("A2:A" & LRDB1)
                .Formula = "=CONCATENATE(RC[1],RC[2],RC[3],RC[4],RC[5],RC[6],RC[7])"
                .Value = .Value
            End With
     
        End With
     
    'Rechercher la 1ère des 7 colonnes contenant les données de dimension analytique et définir la dernière colonne
     
        With Sheets("Data to check")
     
        Set StartRange = .Cells.Find("Responsable", LookIn:=xlValues)
        ColToInsert = StartRange.Column
        LastColumn = StartRange.End(xlToRight).Offset(0, 1).Column
        ColGap = LastColumn - ColToInsert + 1
        FirstRow = StartRange.Row + 1
        LastRow = StartRange.End(xlDown).Row
     
        StartRange.EntireColumn.Insert
     
            With .Range(.Cells(FirstRow, ColToInsert), .Cells(LastRow, ColToInsert))
                .Formula = "=CONCATENATE(RC[1],RC[2],RC[3],RC[4],RC[5],RC[6],RC[7])"
                .Value = .Value
            End With
     
            With .Range(.Cells(FirstRow, LastColumn), .Cells(LastRow, LastColumn))
                .Formula = "=IF(ISERROR(VLOOKUP(RC[-ColGap],'Data Base'!C1,1,0)),""A vérifier"",""OK"")"
                .Value = .Value
            End With
     
        End With
     
    End Sub
    Si ce roman vous assomme, je peux vous transmettre le fichier en pièce jointe.

    D'avance merci pour votre aide !
    Runsh

  2. #2
    Membre confirmé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut
    Avec ce code dans la formule, ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     With .Range(.Cells(FirstRow, LastColumn), .Cells(LastRow, LastColumn))
                .Formula = "=IF(ISERROR(VLOOKUP(RC[" & -ColGap & "],'Data Base'!C1,1,0)),""A vérifier"",""OK"")"
                .Value = .Value
            End With
    Par contre, j'ai le même message d'erreur là-dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(.Cells(1, LastColumn - 1)) = "Dimensions à vérifier"
    Ci-joint mon nouveau code (seule la fin change) :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Sub Compare_data()
     
    Dim LRDB1 As Long
    Dim StartRange As Range, ColToInsert As Byte, LastColumn As Byte, ColGap As Byte, FirstRow As Integer, LastRow As Long
     
    Application.ScreenUpdating = False
     
    'Concaténer les 7 dimensions analytiques en colonne A
     
        With Sheets("Data Base")
     
        LRDB1 = .Range("A" & .Rows.Count).End(xlUp).Row
     
        .Range("A1").EntireColumn.Insert
     
            With .Range("A2:A" & LRDB1)
                .Formula = "=CONCATENATE(RC[1],RC[2],RC[3],RC[4],RC[5],RC[6],RC[7])"
                .Value = .Value
            End With
     
        End With
     
    'Rechercher la 1ère des 7 colonnes contenant les données de dimension analytique et définir la dernière colonne
     
        With Sheets("Data to check")
     
        Set StartRange = .Cells.Find("Responsable", LookIn:=xlValues)
        ColToInsert = StartRange.Column
        LastColumn = StartRange.End(xlToRight).Offset(0, 2).Column
        ColGap = LastColumn - ColToInsert
        FirstRow = StartRange.Row + 1
        LastRow = StartRange.End(xlDown).Row
     
        StartRange.EntireColumn.Insert
     
            With .Range(.Cells(FirstRow, ColToInsert), .Cells(LastRow, ColToInsert))
                .Formula = "=CONCATENATE(RC[1],RC[2],RC[3],RC[4],RC[5],RC[6],RC[7])"
                .Value = .Value
            End With
     
            With .Range(.Cells(FirstRow, LastColumn), .Cells(LastRow, LastColumn))
                .Formula = "=IF(ISERROR(VLOOKUP(RC[" & -ColGap & "],'Data Base'!C1,1,0)),""A vérifier"",""OK"")"
                .Value = .Value
            End With
     
        StartRange.Offset(0, -1).EntireColumn.Delete
     
        .Range(.Cells(1, LastColumn - 1)) = "Dimensions à vérifier"
     
            With .Range(.Cells(1, LastColumn - 1), .Cells(LastRow, LastColumn - 1))
                .AutoFilter Field = 1, Criteria1:="A vérifier"
            End With
     
        End With
     
    End Sub
    Runsh

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

Discussions similaires

  1. Utiliser une valeur d'une variable dans une Macro
    Par ca_adrien dans le forum Macro
    Réponses: 7
    Dernier message: 01/08/2013, 14h14
  2. utilisation d'une variable d'une class dans une autre class
    Par the watcher dans le forum Langage
    Réponses: 7
    Dernier message: 31/08/2010, 14h01
  3. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  4. Réponses: 4
    Dernier message: 29/01/2008, 11h12
  5. Réponses: 1
    Dernier message: 15/02/2007, 00h24

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