Variable de bouclage dans formule RechercheV
Thibault LB
-
Thibault LB -
Thibault LB -
Bonjour,
Voici un bout de macro que je suis en train de faire.
J'aimerais qu'elle parcourt toutes les cellules de A7 a A20.
Mais j'ai essayé de nombreuses formes pour le $A[i], en gras ci-dessous, sans succès.
For i = 7 To 20
numLigne = "=EQUIV(RECHERCHEV($A[i];[Test2.xlsm]Feuil1!$A$7:$A$23;1;FAUX);[Test2.xlsm]Feuil1!$A$7:$A$23;0)"
numLigne = numLigne + 7
Range("A" & numLigne).Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Next
Merci d'avance !
Voici un bout de macro que je suis en train de faire.
J'aimerais qu'elle parcourt toutes les cellules de A7 a A20.
Mais j'ai essayé de nombreuses formes pour le $A[i], en gras ci-dessous, sans succès.
For i = 7 To 20
numLigne = "=EQUIV(RECHERCHEV($A[i];[Test2.xlsm]Feuil1!$A$7:$A$23;1;FAUX);[Test2.xlsm]Feuil1!$A$7:$A$23;0)"
numLigne = numLigne + 7
Range("A" & numLigne).Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Next
Merci d'avance !
A voir également:
- Variable de bouclage dans formule RechercheV
- Formule si ou - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Formule mathématique - Télécharger - Études & Formations
- Excel mise en forme conditionnelle formule - Guide
- Formule somme excel ligne - Guide
8 réponses
On ne peut pas écrire de formule Excel dans du code VBA, à moins que je sois à la bourre?! =/
Que cherches-tu à faire?
Que cherches-tu à faire?
Ah bon :/.
En fait, je poste ici une petite partie de la macro que je cherche à faire lors de ce sujet : http://www.commentcamarche.net/forum/affich-25272529-macro-de-maj-de-liste-avec-source-excel#newanswer
Dans ce bout de macro, je cherche à récupérer le numéro des lignes qui sont différentes entre les deux listes.
Une fois ces numéros de lignes en main, j'insère une ligne à cette endroit.
J'espère être clair.
En fait, je poste ici une petite partie de la macro que je cherche à faire lors de ce sujet : http://www.commentcamarche.net/forum/affich-25272529-macro-de-maj-de-liste-avec-source-excel#newanswer
Dans ce bout de macro, je cherche à récupérer le numéro des lignes qui sont différentes entre les deux listes.
Une fois ces numéros de lignes en main, j'insère une ligne à cette endroit.
J'espère être clair.
Dans un des deux fichiers, tu ouvres l'autre en VBA ensuite, avec un compteur, tu vérifies que tes lignes sont les mêmes. Si les lignes sont différentes alors tu met le numéro de la ligne différente dans un tableau définit.
J'ai la flemme d'écrire le code mais l'algo est là.
J'ai la flemme d'écrire le code mais l'algo est là.
Ah oui je vois ce que tu veux dire.
Ile me faudrait quelque chose dans ce type la plutôt :
"=MATCH(VLOOKUP(R[-10]C[" & i & "],[Test2.xlsm]Feuil1!R7C1:R23C1,1,FALSE),[Test2.xlsm]Feuil1!R7C1:R20C1,0)" ?
Ile me faudrait quelque chose dans ce type la plutôt :
"=MATCH(VLOOKUP(R[-10]C[" & i & "],[Test2.xlsm]Feuil1!R7C1:R23C1,1,FALSE),[Test2.xlsm]Feuil1!R7C1:R20C1,0)" ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Arrete de penser en tant que formule Excel mais pense plutot programmation et VBA avec des if... then ... end if
Ah :).
J'avais pas vu ton message précédent, désolé. Je suis donc resté sur ma piste de début.
Je suis au début de VBA, donc j'essaye de m'y interresser et de comprendre le raisonnement.
Je vais essayer de faire quelque chose, et je le metterais ici, mais attention ça risque d'être marrant !
Si d'autres sont tentés de m'aider, ce serait avec plaisir.
En tout cas merci.
Thibault.
J'avais pas vu ton message précédent, désolé. Je suis donc resté sur ma piste de début.
Je suis au début de VBA, donc j'essaye de m'y interresser et de comprendre le raisonnement.
Je vais essayer de faire quelque chose, et je le metterais ici, mais attention ça risque d'être marrant !
Si d'autres sont tentés de m'aider, ce serait avec plaisir.
En tout cas merci.
Thibault.
Commence à programmer et si t'es pas sûr ou si sa plante, post le, on y regardera avec plaisir ;)
On a tous commencé tu sais, mes premiers programmes étaient très moches aussi, mais faut un début a tout!
On a tous commencé tu sais, mes premiers programmes étaient très moches aussi, mais faut un début a tout!
Me revoila !
Bon alors voila ce que j'ai reussi à faire pour le moment :
Private Function EstDansCollection(Coln As Object, Item As String) As Boolean
Dim obj As Object
On Error Resume Next
Set obj = Coln(Item)
EstDansCollection = Not obj Is Nothing
End Function
'Cette fonction me permet de vérifier si le fichier est deja ouvert (il me l'ouvrait en lecture seule sinon), mais ça ne marche pas :'(
Public Function MacroExcel()
'Permet d'ouvrir le fichier Test1.xls si ce n'est pas le cas.
If EstDansCollection(Workbooks, "Test1.xls") = True Then
MsgBox "Le classeur est déjà ouvert !"
Else
Workbooks.Open Filename:="D:\Documents and Settings\yr26686\Bureau\Test1.xls"
End If
End Function
Sub Test()
'MacroExcel
Windows("Test1.xls").Activate
Dim numLigne As Long
Dim NomTableau(50) As Integer
Dim i As Integer
For i = 7 To 9
'Remplacer "???" par la comparaison de A[i] avec la liste du fichier Test2, mais je ne trouve pas comment faire...
If ??? Then
NomTableau(i) = numLigne
End If
Next i
'Cela me sert juste à vérifier si les données ont été entrées dans le tableau
For numLigne = 0 To 50
MsgBox NomTableau(numLigne)
Next numLigne
Voila ! Je galère bien bien :P
Bon alors voila ce que j'ai reussi à faire pour le moment :
Private Function EstDansCollection(Coln As Object, Item As String) As Boolean
Dim obj As Object
On Error Resume Next
Set obj = Coln(Item)
EstDansCollection = Not obj Is Nothing
End Function
'Cette fonction me permet de vérifier si le fichier est deja ouvert (il me l'ouvrait en lecture seule sinon), mais ça ne marche pas :'(
Public Function MacroExcel()
'Permet d'ouvrir le fichier Test1.xls si ce n'est pas le cas.
If EstDansCollection(Workbooks, "Test1.xls") = True Then
MsgBox "Le classeur est déjà ouvert !"
Else
Workbooks.Open Filename:="D:\Documents and Settings\yr26686\Bureau\Test1.xls"
End If
End Function
Sub Test()
'MacroExcel
Windows("Test1.xls").Activate
Dim numLigne As Long
Dim NomTableau(50) As Integer
Dim i As Integer
For i = 7 To 9
'Remplacer "???" par la comparaison de A[i] avec la liste du fichier Test2, mais je ne trouve pas comment faire...
If ??? Then
NomTableau(i) = numLigne
End If
Next i
'Cela me sert juste à vérifier si les données ont été entrées dans le tableau
For numLigne = 0 To 50
MsgBox NomTableau(numLigne)
Next numLigne
Voila ! Je galère bien bien :P
Je veux vérifier si chaque cellule A7 jusqu'a A[X] (avec X dernière cellule non vide de la colonne) du fichier Test2 est dans Test1, et si ce n'est pas le cas, stocker le numéro de la ligne dans le tableau.
Pour plus de comprehension peut être :
Test 1 : http://cjoint.com/?BEEkoyWsrps
Test 2 : http://cjoint.com/?BEEkl6S7xyf
Pour plus de comprehension peut être :
Test 1 : http://cjoint.com/?BEEkoyWsrps
Test 2 : http://cjoint.com/?BEEkl6S7xyf
Je peux pas vérifier ton fichier d'où je suis mais je peux t'aider :
Ainsi, par exemple, si les lignes 7 sont différentes, alors NomTableau(7) = 1 sinon NomTableau(7) = 0
Attention, j'ai codé comme un barbare par manque de temps, tu peux largement améliorer mon code! (Surtout au niveau des boucles For que je fais!) mais là j'étais pressé.
Dim compteur as integer Dim derniere_ligne as Integer 'Permet de trouver la dernière ligne écrite For compteur = 7 to 20000 If Test2.Sheets(...).Cells(compteur, 1).value ="" then derniere_ligne = compteur Exit For End If Next Compteur 'On initialise ton tableau à 0 Dim NomTableau(derniere_ligne) As Integer For compteur = 1 to derniere_ligne NomTableau(compteur) = 0 Next compteur 'On vérifie les lignes et si elles sont différentes, on met un 1 à l'indice de la ligne For compteur = 7 to derniere_ligne If Test2.Sheets(...).Cells(compteur, 1).Value <> Test1.Sheets(...).Cells(compteur, 1).Value then NomTableau(compteur) = 1 End If Next compteur
Ainsi, par exemple, si les lignes 7 sont différentes, alors NomTableau(7) = 1 sinon NomTableau(7) = 0
Attention, j'ai codé comme un barbare par manque de temps, tu peux largement améliorer mon code! (Surtout au niveau des boucles For que je fais!) mais là j'étais pressé.
Merci pour avoir chercher de ton côté !!
J'avais aussi reussi a récupérer la dernière ligne non vide, par :
DerniereLigne = Cells(65536, 1).End(xlUp).Row 'Sur la colonne A, ce qu'il me faut.
Je ne comprend pas pourquoi tu fais autant de Next compteur.
Sinon, juste une petite remarque. Je ne veux pas comparer A7 du Test1 à A7 du Test2, A8 du Test1 à A8 du test2, et ainsi de suite. Ce que je veux, c'est comparer A7 du test1 à (A7 jusqu'a A[DerniereLigne]) du Test2, A8 du test1 à (A7 jusqu'a A[DerniereLigne]) du Test2, et ainsi de suite.
J'espère avoir été clair :D.
Et voila ce que j'ai fait pour ce sujet la, mais mon tableau reste vide, alors qu'il ne devrait pas :
Sub Test()
'Permet d'ouvrir le fichier Test1.xls si ce n'est pas le cas.
MacroExcel
Windows("Test1.xls").Activate
Dim numLigne As Long
Dim NomTableau(5) As Integer
Dim i As Integer
Dim DerniereLigne As Integer
Dim Lig
DerniereLigne = Cells(65536, 1).End(xlUp).Row 'On va aller trouver la dernière ligne de la colonne A
MsgBox "" & DerniereLigne
For i = 7 To 9
Valeur_Test = Cells(i, 1).Value 'La valeur qu'on souhaite tester
'On va voir si on trouve la valeur testée.
Windows("Test2.xlsm").Activate
Set Lig = Range(Cells(1, 1), Cells(DerniereLigne, 1)).Find(Valeur_Test, LookIn:=xlValues, LookAt:=xlWhole)
If Lig Is Nothing Then
NomTableau(numLigne) = i
End IfNext i
J'avais aussi reussi a récupérer la dernière ligne non vide, par :
DerniereLigne = Cells(65536, 1).End(xlUp).Row 'Sur la colonne A, ce qu'il me faut.
Je ne comprend pas pourquoi tu fais autant de Next compteur.
Sinon, juste une petite remarque. Je ne veux pas comparer A7 du Test1 à A7 du Test2, A8 du Test1 à A8 du test2, et ainsi de suite. Ce que je veux, c'est comparer A7 du test1 à (A7 jusqu'a A[DerniereLigne]) du Test2, A8 du test1 à (A7 jusqu'a A[DerniereLigne]) du Test2, et ainsi de suite.
J'espère avoir été clair :D.
Et voila ce que j'ai fait pour ce sujet la, mais mon tableau reste vide, alors qu'il ne devrait pas :
Sub Test()
'Permet d'ouvrir le fichier Test1.xls si ce n'est pas le cas.
MacroExcel
Windows("Test1.xls").Activate
Dim numLigne As Long
Dim NomTableau(5) As Integer
Dim i As Integer
Dim DerniereLigne As Integer
Dim Lig
DerniereLigne = Cells(65536, 1).End(xlUp).Row 'On va aller trouver la dernière ligne de la colonne A
MsgBox "" & DerniereLigne
For i = 7 To 9
Valeur_Test = Cells(i, 1).Value 'La valeur qu'on souhaite tester
'On va voir si on trouve la valeur testée.
Windows("Test2.xlsm").Activate
Set Lig = Range(Cells(1, 1), Cells(DerniereLigne, 1)).Find(Valeur_Test, LookIn:=xlValues, LookAt:=xlWhole)
If Lig Is Nothing Then
NomTableau(numLigne) = i
End IfNext i
Un for dans un for? (Tu vas me dire que j'aime bien les for, je sais :p )
Ainsi, imagine que la cellule 7 de test1 soit trouvé en ligne 14, tu auras dans ton tableau NomTableau(7) = 14
Pour ton code, tu écris NomTableau(numLigne) = i cependant, tu ne définis à aucun moment ton numLigne, voila pourquoi il ne fonctionne pas^^
For compteur = 7 to derniereligne
valeur = Cells(compteur, 1).Value
For compteur2=7 to derniereligne
if test2.sheets(...).cells(compteur2, 1).value = valeur then
NomTableau(compteur)=compteur2
end if
next compteur2
next compteur
Ainsi, imagine que la cellule 7 de test1 soit trouvé en ligne 14, tu auras dans ton tableau NomTableau(7) = 14
Pour ton code, tu écris NomTableau(numLigne) = i cependant, tu ne définis à aucun moment ton numLigne, voila pourquoi il ne fonctionne pas^^