Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/11/2011, 10h25   #1
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 396
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 396
Points : 420
Points : 420
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 :
.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 :
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 !
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 11h09   #2
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 396
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 396
Points : 420
Points : 420
Avec ce code dans la formule, ça fonctionne :

Code :
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 :
.Range(.Cells(1, LastColumn - 1)) = "Dimensions à vérifier"
Ci-joint mon nouveau code (seule la fin change) :

Code :
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
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h53.


 
 
 
 
Partenaires

Hébergement Web