Problème du code
Bonjour,
J'essaie de faire un code qui permet d'appliquer 2 formules sur une nouvelle feuille renommée en se basant sur les données d'une autre feuille que je souhaite la choisir en entrant son nom.
voici le code sur lequel je travaille :
With ActiveSheet.UsedRange
NbLignes = .Row + .Rows.Count - 1 'la dernière ligne du tableau
End With
For i = NbLignes To 2 Step -1 'on commence à partir de la 2ème cellule de la colonne Q
Cells(i, "Q").FormulaR1C1 = "=RC[-3]/RC[-6]" ' sur la nouvelle feuille j'applique cette formule
'je fais appel à la feuille avec qui je veux comparer des données
nomfeuil = InputBox("Veuillez entrer le nom de la feuille objet de la comparaison")
Sheets(nomfeuil).Select
Cells(i, "P").FormulaR1C1 = "=IF(ISERROR(VLOOKUP(nomfeuil!RC[-1],nomfeuil!R2C15:R12C16,1,FALSE))=TRUE,""Faux"",VLOOKUP(nomfeuil!RC[-1],nomfeuil!R2C15:R12C16,2,FALSE))"
'en Excel c'est la formule suivate : SI(ESTERREUR(RECHERCHEV(K2;$F$2:$G$1229;1;FAUX))=VRAI;"Faux";RECHERCHEV(K2;$F$2:$G$1229;2;FAUX))
Next i
Merci de m'aider sur ce point avec des explications SVP pour apprendre.
Salut,
Je peux déjà te dire que si tu veux introduire des variables dans une formule, tu dois mettre une guillemet et un digne & avant la variable, la variable, le signe & et à nouveau une guillemet.
Par exemple
Cells(i, "P").FormulaR1C1 = "=IF(ISERROR(VLOOKUP(" & nomfeuil & "!RC[-1]," & nomfeuil & "!R2C15:R12C16,1,FALSE))=TRUE,""Faux"",VLOOKUP(" & nomfeuil & "!RC[-1]," & nomfeuil & "!R2C15:R12C16,2,FALSE))"Mais très souvent il faut mieux utiliser directement des fonctions VBA plutôt que de placer des fonctions Excel sur la feuille à l’aide de codes VBA.
Sans avoir ton fichier à disposition - afin d’essayer de voir où tu veux en venir - c’est assez compliqué de t’aider plus.
Cordialement.
Bonjour,
Merci Yvouille pour ton retour.
ci-joint le fichier sur lequel je travaille.
Encore merci
Cordialement
Josef a écrit :Bonjour,
Merci Yvouille pour ton retour.
ci-joint le fichier sur lequel je travaille.
Encore merci
Cordialement
J'ai oublié le fichier.
Le voilà
Salut,
Tu as surement loupé l'étape 4
Tu pourrais déjà me dire si tu as testé mon bout de code !
A te relire.
Re: Yvouille
j'ai essayé ta proposition mais ça bloque lorsque veux choisir la feuille objet de la comparaison.
je sais pas qu'est ce que j'ai raté mais il reste bloquer sur InputBox("Veuillez entrer le nom de la feuille objet de la comparaison").
Salut,
Je ne peux pas ouvrir ton fichier .rar sur le PC du travail et peut-être pas non plus ce soir à la maison.
Si un fichier est trop gros, essaie d'abord de le compresser, de supprimer des pages inutiles, de ne laisser que les 10 lignes utiles à la démontration du problème sur les 10'000 de base, etc.
Si ça ne passe toujours pas, utilise le site CJoint http://www.cjoint.com/
A te relire.
Salut,
Ta demande est quand même un peu tordue
Tout d’abord tu ne présentes pas la même macro dans ton premier message (tu as des formules ‘FormulaR1C1’) et dans ta macro actuelle (où il y a des formules ‘FormulaLocal’ et des ‘Formula’)
Ensuite, tu as dans ta macro l’exportation d’une feuille d’un fichier extérieur, mais comme je n’ai pas ce fichier extérieur à ma disposition, je ne peux pas effectuer les essais complets
Peut-être alors que l’une des feuilles en place dans ton fichier modèle correspond à la feuille normalement exportée par la macro, mais comment le savoir ???
Et puis pourquoi ne pas donner à chaque fois le même nom à la feuille exportée ? Quelle en est la raison ?
Soit tu apportes un peu de lumière dans cet embrouillamini, soit je vais devoir abandonner.
A te relire.
Salut Yvouille, et merci pour ton retour
c'est vrai, depuis hier j'essaie de trouver une solution pour ce problème et j'ai tenté les différentes solutions trouvées sur les forums, c'est pour cela que la macro actuelle est différente d'hier (j'ai cru que formulalocal permet de d'utiliser les formules d'excel directement en les mettant entre les guillemets mais ça marche pas)
j'ai mis en jointure à ce message 2 exmples des fichiers extérieurs.
la feuille "test1" contient les données nécessaires ou bien sur lesquelles on se base, dans la feuille créée (dans ce cas la feuille Fichier) après avoir importer le fichier, pour rechercher les valeurs qui manquent dans la colonne P.feuille fichier.
Pour le nom, j'ai besoin de renommer chaque feuille créée pour distinguer les fichiers importés et pour avoir la possibilité de faire la comparaison du fichier importé avec n'importe quelle feuille déjà existante.
J’espère que j'ai apporté un peu de lumière, n'hésites pas si tu as besoin d'autres informations.
Merci beaucoup.
Salut,
Si on en avait ça aurait facilité le tout
voilà le fichier :
Merci pour ton effort
Salut,
Voilà 2 fichiers en txt :
: fichier 1
: Fichier 2
Re,
Normalement la modification que j’ai apportée à ta macro dans le fichier ci-joint devrait correspondre à ton attente.
Je l’ai fait d’une manière un peu spéciale pour bien te montrer que ma modification de code apportée ‘à l’aveugle’ le 20 avril n’était pas si mauvaise
En effet, selon le code que tu avais présenté le même jour Cells(i, "P").FormulaR1C1 = "=IF(ISERROR(VLOOKUP(nomfeuil!RC[-1],nomfeuil!R2C15:R12C16,1,FALSE))=TRUE,""Faux"",VLOOKUP(nomfeuil!RC[-1],nomfeuil!R2C15:R12C16,2,FALSE))", ma proposition ci-après aurait été exacte : Cells(i, "P").FormulaR1C1 = "=IF(ISERROR(VLOOKUP(" & nomfeuil & "!RC[-1]," & nomfeuil & "!R2C15:R12C16,1,FALSE))=TRUE,""Faux"",VLOOKUP(" & nomfeuil & "!RC[-1]," & nomfeuil & "!R2C15:R12C16,2,FALSE))"
Mais en travaillant ton fichier, j’ai vu que tu avais fait une erreur à ce niveau-là : IF(ISERROR(VLOOKUP(nomfeuil!RC[-1] car tu recherches ainsi la valeur d’une autre feuille que celle sur laquelle sont inscrite par macro les formules. Ce passage corrigé aurait dont dû être selon ton code erroné IF(ISERROR(VLOOKUP(RC[-1] (référence à la feuille elle-même par défaut) et moi, au lieu de te proposer le bout de code IF(ISERROR(VLOOKUP(" & nomfeuil & "!RC[-1] , je t’aurais proposé IF(ISERROR(VLOOKUP(RC[-1].
Donc si tu compares le code ci-dessous – placé dans le fichier ci-joint – et mon code du 29 avril, tu vois qu’il n’y a que cette référence à la fausse feuille qui change.
Dim nomfeuil As String
nomfeuil = onglet
For i = 2 To NbLignes
Cells(i, "P").FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1]," & nomfeuil & "!R2C15:R12C16,1,FALSE))=TRUE,""Faux"",VLOOKUP(RC[-1]," & nomfeuil & "!R2C15:R12C16,2,FALSE))"
Next iParmi les bizarreries nécessaires à permettre la comparaison entre mon ancien et mon nouveau code, il y a cette ligne nomfeuil = onglet qui transforme ta nouvelle dénomination de variable en ton ancienne dénomination de la même variable. Par la suite, tu peux bien entendu choisir l'une ou l'autre dénomination.
A te relire.
NB : D’autres passages de ton code fonctionnent mais mériteraient d’être corrigés.
NB bis : Je ne comprends pas que tu t’entêtes à vouloir passer tes fichiers par CJoint alors qu’ils ne dépassent pas la taille de 300 Ko et qu’ils peuvent donc tout à fait être placés avec les moyens du Forum, tel que je te l’ai indiqué le 29 avril, ce qui serait plus simple pour les deux parties.
Salut Yvouille,
Je te remercie énormément, en effet la macro maaaaaaaaaarche correctement.
Mes respects et sincères remerciement.
PS : je suis débutant dans VBA et c'est très encourageant de trouver des gens comme toi pour aider à apprendre.

