avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 2012
-
28 déc. 2007 à 22:21
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
30 déc. 2007 à 21:08
Bonjour à tous,
«je rencontre un petit problème avec une fonction rechercheV avec execl VBA.
Dans l'onglet Tableau cumulatif, dans la ColoneA,doit mettre le numéro de la semaine tout dépendant la date qui se trouve dans la colone B de la même ligne.
La base de donnée se trouve dans l'onglet Base de données dans la colone H ( Date 2008) et colone I (Numéro de la semaine)
Maintenant, lorsque je clique sur un bouton vb, dans la colone A, il me met la valeur FAUX quand pourtant, dans les 2 onglet, les dates ont le même format.
Voici mon script:
Private Sub CommandButton3_Click()
Dim Ligne As Long
For K = 1 To 56000
Ligne = (Range("A56000").End(xlUp).Row + 1)
If Range("A" & Ligne) = vbNullString & Range("B" & Ligne) >= 0 Then Range("A" & Ligne) Range("B" & Ligne) "=VLOOKUP(RC[1],'Base de données'!H1:J56000,2,Faux)"
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 30 déc. 2007 à 20:46
Si j'ai bien compris, tu peux essayer ceci
Sub Formule()
Dim nbLignes As Long
'Nombre de lignes dans la colonne B
nbLignes = Cells(Rows.Count, "B").End(xlUp).Row
'Formule inscrite en colonne A
Range("A1:A" & nbLignes).Formula = "=IF(ISERROR(VLOOKUP(B1,'Base de données'!H:I,2,FALSE)),"""",VLOOKUP(B1,'Base de données'!H:I,2,FALSE))"
End Sub
Donc, si la date en B est trouvée dans la feuille Base de données en H, il va inscrire le numéro de semaine trouvé en A
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 30 déc. 2007 à 21:08
Le plus simple (et le plus rapide, je pense) est de copier la colonne en valeur après avoir créé les formules
Sub Formule()
Dim nbLignes As Long
'Nombre de lignes dans la colonne B
nbLignes = Cells(Rows.Count, "B").End(xlUp).Row
'Formule inscrite en colonne A
Range("A1:A" & nbLignes).Formula = "=IF(ISERROR(VLOOKUP(B1,'Base de
données'!H:I,2,FALSE)),"""",VLOOKUP(B1,'Base de données'!H:I,2,FALSE))"
Columns("A").Copy
Columns("A").PasteSpecial xlPasteValues
Application.CutCopyMode = False 'pour enlever la surbrillance
End Sub
Autrement, il faudrait boucler toute la colonne et y insérer la valeur trouvée par une RechercheV faite sur chaque ligne...
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 28 déc. 2007 à 22:48
Ouh lala !
For K = 1 To 56000
Ligne = (Range("A56000").End(xlUp).Row + 1)
If Range("A" & Ligne) = vbNullString & Range("B" & Ligne) >= 0
Comme tu mets la formule de "Ligne = ..." à l'intérieur de ta boucle, Ligne sera toujours égal à la même chose...
Range("A" & Ligne) Range("B" & Ligne) "=VLOOKUP(RC[1],'Base de données'!H1:J56000,2,Faux)"
Ici, tu ne peux pas mettre deux "=" dans une même ligne de code. En C, tu pourrais (sauf si c'est illogique), mais pas en VB.
Finalement
Selection.Copy
Ici, rien n'est sélectionné... donc rien ne devrait être copié sauf la cellule active au moment de l'appel...
Inscris la formule telle que tu l'écrirais dans la barre de formule d'Excel et où tu voudrais la mettre (en A ou en B ?)
avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 20123 30 déc. 2007 à 18:47
Merci pour ton aide.
Voici comment jr l'aurais inscrit dans la celule de la colone A
=RECHERCHEV(B7;'Base de données'!H:I;2;0)
Mais je ne veux pas qu'il prenne toujout la valeur de B7.
Si je rajoute une donné dison à la ligne 27, il fera une rechercheV selon la donnée qui se trouve dans B27.
Vous n’avez pas trouvé la réponse que vous recherchez ?