A voir également:
- Variable de bouclage dans formule RechercheV
- Formule excel - Guide
- Formule si et - Guide
- Formule moyenne excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Vba range avec variable ✓ - Forum VB / VBA
8 réponses
linkcr15
Messages postés
362
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
31 mars 2016
12
30 mai 2012 à 11:42
30 mai 2012 à 11:42
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.
linkcr15
Messages postés
362
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
31 mars 2016
12
30 mai 2012 à 11:49
30 mai 2012 à 11:49
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
linkcr15
Messages postés
362
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
31 mars 2016
12
30 mai 2012 à 13:56
30 mai 2012 à 13:56
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.
linkcr15
Messages postés
362
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
31 mars 2016
12
30 mai 2012 à 14:01
30 mai 2012 à 14:01
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
linkcr15
Messages postés
362
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
31 mars 2016
12
30 mai 2012 à 16:30
30 mai 2012 à 16:30
Tu veux vérifier quelle(s) cellule(s)?
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
linkcr15
Messages postés
362
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
31 mars 2016
12
30 mai 2012 à 17:13
30 mai 2012 à 17:13
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
linkcr15
Messages postés
362
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
31 mars 2016
12
30 mai 2012 à 17:49
30 mai 2012 à 17:49
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^^