Variable de bouclage dans formule RechercheV

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 !

8 réponses

  1. On ne peut pas écrire de formule Excel dans du code VBA, à moins que je sois à la bourre?! =/
    Que cherches-tu à faire?
    0
    1. 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.
      0
      1. 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à.
        0
        1. 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)" ?
          0
          1. Arrete de penser en tant que formule Excel mais pense plutot programmation et VBA avec des if... then ... end if
            0
            1. 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.
              0
              1. 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!
                0
                1. 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
                  0
                  1. Tu veux vérifier quelle(s) cellule(s)?
                    0
                  2. 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
                    0
                  3. Je peux pas vérifier ton fichier d'où je suis mais je peux t'aider :

                    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é.
                    0
                  4. 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 If
                    Next i
                    0
                  5. Un for dans un for? (Tu vas me dire que j'aime bien les for, je sais :p )
                    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^^
                    0