Vba : erreur formule
Usgpa
-
Usgpa -
Usgpa -
Bonjour,
Je souhaiterais trouver une cellule en cherchant sa ligne et sa colonne selon deux valeurs d'un tableau :
Dim c As Integer
Dim cherche As String
cherche = Feuil2.Range("B" & I).Value
c = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = UserForm2.TextBox69
b = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Feuil5.Range(b & c).Offset(0, 1) = Feuil5.Range(b & c).Offset(0, 1).Value + 1
Unload UserForm2
End Sub
Il me dit que la méthode range de l'objet worksheet a échoué... vous avez une idée ?
Je souhaiterais trouver une cellule en cherchant sa ligne et sa colonne selon deux valeurs d'un tableau :
Dim c As Integer
Dim cherche As String
cherche = Feuil2.Range("B" & I).Value
c = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = UserForm2.TextBox69
b = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Feuil5.Range(b & c).Offset(0, 1) = Feuil5.Range(b & c).Offset(0, 1).Value + 1
Unload UserForm2
End Sub
Il me dit que la méthode range de l'objet worksheet a échoué... vous avez une idée ?
24 réponses
Merci l'erreur est résolue et fonctionen aussi avec le nom des feuilles mais malheureusement, la formule ne marche pas...
Dim c As Integer
Dim cherche As String
cherche = Sheets("Archive Cessions").Range("B" & I).Value
c = Sheets("Statistiques").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = UserForm2.TextBox69
b = Sheets("Statistiques").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Sheets("Feuil5").Range(c & b).Offset(0, 1) = Sheets("Feuil5").Range(c & b).Offset(0, 1).Value + 1
Unload UserForm2
End Sub
la nouvelle erreur : Variable objet ou variable de bloc With non définie.
Connaissez vous une possible solution ?
Dim c As Integer
Dim cherche As String
cherche = Sheets("Archive Cessions").Range("B" & I).Value
c = Sheets("Statistiques").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = UserForm2.TextBox69
b = Sheets("Statistiques").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Sheets("Feuil5").Range(c & b).Offset(0, 1) = Sheets("Feuil5").Range(c & b).Offset(0, 1).Value + 1
Unload UserForm2
End Sub
la nouvelle erreur : Variable objet ou variable de bloc With non définie.
Connaissez vous une possible solution ?
J'ai un peu modifié la formule qui bloque au niveau de "cherche = Sheets("Feuil2").Range("B" & K).Value". l'erreur 9 me dit que l'indice n'appartient pas à la sélection.
Ce que je souhaite faire pour vous expliquer, c'est trouver dans une liste feuillle 2, la dernière ligne du tableau et de se servir de deux données de cette ligne pour remplir un tableau Feuille5.
Private Sub CommandButton3_Click()
Dim K As Integer
K = 1
While Feuil2.Range("A" & K) <> ""
K = 1 - 1
Dim c As Integer
Dim cherche As String
cherche = Sheets("Feuil2").Range("B" & K).Value
c = Sheets("Feuil5").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = Sheets("Feuil2").Range("C" & K).Value
b = Sheets("Feuil5").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Sheets("Feuil5").Range(b & c).Offset(0, 1) = Feuil5.Range(b & c).Offset(0, 1).Value + 1
Wend
Ce que je souhaite faire pour vous expliquer, c'est trouver dans une liste feuillle 2, la dernière ligne du tableau et de se servir de deux données de cette ligne pour remplir un tableau Feuille5.
Private Sub CommandButton3_Click()
Dim K As Integer
K = 1
While Feuil2.Range("A" & K) <> ""
K = 1 - 1
Dim c As Integer
Dim cherche As String
cherche = Sheets("Feuil2").Range("B" & K).Value
c = Sheets("Feuil5").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = Sheets("Feuil2").Range("C" & K).Value
b = Sheets("Feuil5").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Sheets("Feuil5").Range(b & c).Offset(0, 1) = Feuil5.Range(b & c).Offset(0, 1).Value + 1
Wend
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai un peu modifié la formule qui bloque au niveau de "cherche = Sheets("Feuil2").Range("B" & K).Value". l'erreur 9 me dit que l'indice n'appartient pas à la sélection.
Ce que je souhaite faire pour vous expliquer, c'est trouver dans une liste feuillle 2, la dernière ligne du tableau et de se servir de deux données de cette ligne pour remplir un tableau Feuille5.
Private Sub CommandButton3_Click()
Dim K As Integer
K = 1
While Feuil2.Range("A" & K) <> ""
K = 1 - 1
Dim c As Integer
Dim cherche As String
cherche = Sheets("Feuil2").Range("B" & K).Value
c = Sheets("Feuil5").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = Sheets("Feuil2").Range("C" & K).Value
b = Sheets("Feuil5").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Sheets("Feuil5").Range(b & c).Offset(0, 1) = Feuil5.Range(b & c).Offset(0, 1).Value + 1
Wend
Ce que je souhaite faire pour vous expliquer, c'est trouver dans une liste feuillle 2, la dernière ligne du tableau et de se servir de deux données de cette ligne pour remplir un tableau Feuille5.
Private Sub CommandButton3_Click()
Dim K As Integer
K = 1
While Feuil2.Range("A" & K) <> ""
K = 1 - 1
Dim c As Integer
Dim cherche As String
cherche = Sheets("Feuil2").Range("B" & K).Value
c = Sheets("Feuil5").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = Sheets("Feuil2").Range("C" & K).Value
b = Sheets("Feuil5").Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Sheets("Feuil5").Range(b & c).Offset(0, 1) = Feuil5.Range(b & c).Offset(0, 1).Value + 1
Wend
J'ai un peu avancé, cela fonctionne jusqu'à la ligne:
Feuil5.Range(b & c).Offset(0, 1) = Feuil5.Range(b & c).Offset(0, 1).Value + 1
Private Sub CommandButton3_Click()
Dim K As Integer
K = 1
While Feuil2.Range("A" & K) <> ""
K = K
Dim c As Integer
Dim cherche As String
cherche = Feuil2.Range("B" & K).Value
c = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = Feuil2.Range("C" & K).Value
b = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Feuil5.Range(b & c).Offset(0, 1) = Feuil5.Range(b & c).Offset(0, 1).Value + 1
Wend
With Sheets(2).Cells
Selection.AutoFilter Field:=1
End With
Feuil4.Visible = True
Feuil2.Visible = False
End Sub
Feuil5.Range(b & c).Offset(0, 1) = Feuil5.Range(b & c).Offset(0, 1).Value + 1
Private Sub CommandButton3_Click()
Dim K As Integer
K = 1
While Feuil2.Range("A" & K) <> ""
K = K
Dim c As Integer
Dim cherche As String
cherche = Feuil2.Range("B" & K).Value
c = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = Feuil2.Range("C" & K).Value
b = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Feuil5.Range(b & c).Offset(0, 1) = Feuil5.Range(b & c).Offset(0, 1).Value + 1
Wend
With Sheets(2).Cells
Selection.AutoFilter Field:=1
End With
Feuil4.Visible = True
Feuil2.Visible = False
End Sub
Personne a une petite idée... j'en ai vraiment besoin... Qu'est-ce qui pourrait clocher dans cette ligne alors que b et e sont bien identifié par vba (quand je passe dessus avec ma souris les bonnes valeurs s'affichent). Le problème seraient donc dans la formule... comment ajouter 1 a une valeur donnée ?
Sheets("Feuil5").Range(b & e) = Sheets("Feuil5").Range(b & e).Value + 1
Sheets("Feuil5").Range(b & e) = Sheets("Feuil5").Range(b & e).Value + 1
Tu nous laisse le temps d'arriver, oui?
on n'est pas des machines, N. d. D.
on est aussi bénévoles...
on n'est pas des machines, N. d. D.
on est aussi bénévoles...
Oh ne vous enervez pas, je n'exprimais aucun reproche, seulement la détresse dans laquelle je suis ;) Je multiplie les messages car il me semble que j'avance un peu et que donc je facilite la tâche de ceux qui s'y connaissent un peu plus que moi.
Je vous remercie de votre aide !
Je vous remercie de votre aide !
je facilite la tâche de ceux qui s'y connaissent un peu plus que moi.
Hélas, ca fait l'effet inverse...
combien de lignes (environ) à parcourir dans la colonne A de la feuille 2 ?
As tu besoin de mobiliser toute la feuille 5 (cells) ou qu'elles sont les limites de la zone (par Ex A3:AA3456) ?
suivant ces données, la méthode peut-être complètement différente .
Je reviens en fin d'après midi.
Hélas, ca fait l'effet inverse...
combien de lignes (environ) à parcourir dans la colonne A de la feuille 2 ?
As tu besoin de mobiliser toute la feuille 5 (cells) ou qu'elles sont les limites de la zone (par Ex A3:AA3456) ?
suivant ces données, la méthode peut-être complètement différente .
Je reviens en fin d'après midi.
Alors pour les lignes de la colonne A de la feuille 2, c'est environ 300. pour la feuille 5, la zone du tableau est (A1:DN1467).
Bonjour,
Feuil2.Range("A" & K) => ceci est correct, Range accepte comme parametre une adresse de plage
Range(b & e) => ceci nest pas correct, si tu veux spécifier un numéro de ligne et de colonne, il te faut utiliser cells(ligne, colonne) : Feuil5.Range(b & c) devient Feuil5.cells(c, b)
ensuite y' pas mal de choses que je ne comprends pas dans ton code :
- While Feuil2.Range("A" & K) <> ""
K = K
=> ça c'est tres étrange
- ensuite tu dis : "trouver dans une liste feuillle 2, la dernière ligne du tableau et de se servir de deux données de cette ligne pour remplir un tableau Feuille5"
=> si c'est pour trouver la derniere ligne, pourquoi utiliser la methode find (en plus tu utilises Row et Column là ou tu pourrais utiliser .address) ?
Peux stp stp ré-expliquer ce que tu cherches à faire ?
Feuil2.Range("A" & K) => ceci est correct, Range accepte comme parametre une adresse de plage
Range(b & e) => ceci nest pas correct, si tu veux spécifier un numéro de ligne et de colonne, il te faut utiliser cells(ligne, colonne) : Feuil5.Range(b & c) devient Feuil5.cells(c, b)
ensuite y' pas mal de choses que je ne comprends pas dans ton code :
- While Feuil2.Range("A" & K) <> ""
K = K
=> ça c'est tres étrange
- ensuite tu dis : "trouver dans une liste feuillle 2, la dernière ligne du tableau et de se servir de deux données de cette ligne pour remplir un tableau Feuille5"
=> si c'est pour trouver la derniere ligne, pourquoi utiliser la methode find (en plus tu utilises Row et Column là ou tu pourrais utiliser .address) ?
Peux stp stp ré-expliquer ce que tu cherches à faire ?
Je vais essayer d'expliquer simplement :
En fait grâce à un Userform, je remplie une liste d'objet (Feuil2). La formule qui pose problème, sert en fait, à se servir de la dernière ligne ajoutée pour remplir un tableau statistique.
je me sers du numéro de l'unité et de la date à laquelle elle a été enregistré (supposé ("B" & K) et ("C" & K) pour retrouver la bonne case dans le tableau "statistiques" (feuille5) dont les colonnes sont triés par agences et les lignes par date.
Je ne sais pas si c'est clair. Je vais essayer de me servir de vos conseils pour le rendre enfin efficace.
En fait grâce à un Userform, je remplie une liste d'objet (Feuil2). La formule qui pose problème, sert en fait, à se servir de la dernière ligne ajoutée pour remplir un tableau statistique.
je me sers du numéro de l'unité et de la date à laquelle elle a été enregistré (supposé ("B" & K) et ("C" & K) pour retrouver la bonne case dans le tableau "statistiques" (feuille5) dont les colonnes sont triés par agences et les lignes par date.
Je ne sais pas si c'est clair. Je vais essayer de me servir de vos conseils pour le rendre enfin efficace.
Si vous voulez une idée de là où j'en suis, même si Michel disait que ça le deservait :
Dim MaLigne As Variant
MaLigne = Range("A1").End(xlDown).Row
Dim c As Integer
Dim cherche As String
cherche = Feuil2.Range("B" & MaLigne).Value
c = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = Feuil2.Range("C" & MaLigne).Value
b = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Dim e As Integer
e = c + 1
Sheets("Statistiques").Cells(b & e) = Sheets("Statistiques").Cells(b & e).Value + 1
Il n'y aucun bug avec cette formule mais il n'y a pas de plus 1 non plus dans le tableau "statistiques"...
Dim MaLigne As Variant
MaLigne = Range("A1").End(xlDown).Row
Dim c As Integer
Dim cherche As String
cherche = Feuil2.Range("B" & MaLigne).Value
c = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Row
Dim b As Integer
cherche = Feuil2.Range("C" & MaLigne).Value
b = Feuil5.Cells.Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlNext).Column
Dim e As Integer
e = c + 1
Sheets("Statistiques").Cells(b & e) = Sheets("Statistiques").Cells(b & e).Value + 1
Il n'y aucun bug avec cette formule mais il n'y a pas de plus 1 non plus dans le tableau "statistiques"...
comme promis,
en me basant sur ton post 6
en me basant sur ton post 6
Dim derlig As Integer, cherche_lig As String, cherche_col As String
Dim lig_cibl As Integer, col_cibl As Byte
Dim zone As Range
derlig = Sheets("feuil1").Range("B65536").End(xlUp).Row
Application.ScreenUpdating = False
For cptr = 1 To derlig
With Sheets("feuil1")
cherche_lig = .Cells(cptr, 2)
cherche_col = .Cells(cptr, 3)
End With
With Sheets("feuil2")
Set zone = .Range("A1:DN1467")
If Application.CountIf(zone, cherche_lig) > 0 And Application.CountIf(zone, cherche_col) > 0 Then
lig_cibl = zone.Find(cherche_lig, , , xlWhole).Row
col_cibl = zone.Find(cherche_col, , , , xlWhole).Column
.Cells(lig_cibl, col_cibl + 1) = .Cells(lig_cibl, col_cibl + 1) + 1
Else
MsgBox " valeur inconnue", vbCritical
Exit Sub
End If
End With
Next
MsgBox "opération terminée"
Une fois remplacées les feuilles par leur nom, la formule fonctionne mais me donne chaque fois, la msgbox "valeur inconnue"...
PS : Si vous me postez des réponses je ne pourrais pas vous répondre avant demain.
PS : Si vous me postez des réponses je ne pourrais pas vous répondre avant demain.
Curieux...
Ci joint ma maquette de travail
https://www.cjoint.com/?cbstdQgEBw
Ci joint ma maquette de travail
https://www.cjoint.com/?cbstdQgEBw
Bonjour, Michel.
Je vous remercie et je ne comprends pas, j'ai copié votre module en faisant les modifications nécéssaires et pourtant il me signale à chaque fois "valeur inconnue"...
Si vous le souhaitez, je peux vous montrer mon fichier dans la globalité sachant que la procédure se trouve dans l'Userform2.
http://www.cijoint.fr/cjlink.php?file=cj201002/cij2lSnYwc.xls
Peut-être que ca sera plus facile pour vous avec une idée précise du fichier.
Si vous n'avez pas le temps, merci tout de même pour le temps que vous m'avez déjà accordé.
Je vous remercie et je ne comprends pas, j'ai copié votre module en faisant les modifications nécéssaires et pourtant il me signale à chaque fois "valeur inconnue"...
Si vous le souhaitez, je peux vous montrer mon fichier dans la globalité sachant que la procédure se trouve dans l'Userform2.
http://www.cijoint.fr/cjlink.php?file=cj201002/cij2lSnYwc.xls
Peut-être que ca sera plus facile pour vous avec une idée précise du fichier.
Si vous n'avez pas le temps, merci tout de même pour le temps que vous m'avez déjà accordé.
Bonjour,
Met moi un extrait de classeur limité aux besoins de ton pb
As tu essayé la maquette: je voulais savoir si c'était le principe que tu désirais...
De toutes façons avec 4,9 Mo, fichier obèse, outre le temps d'ouverture, de sauvegarde, tu risques fort d'avoir des refus d'ouverture, de corruption... 95% de ce genre de problèmes viennent de ces fichiers obèses: 2 à 2,5Mo semble la limte. Pour ma part je ne dépasse jamais 1,5 mo et essaie toujours de rester sous 1Mo.
Dans l'attente (absent cet aprem)
Met moi un extrait de classeur limité aux besoins de ton pb
As tu essayé la maquette: je voulais savoir si c'était le principe que tu désirais...
De toutes façons avec 4,9 Mo, fichier obèse, outre le temps d'ouverture, de sauvegarde, tu risques fort d'avoir des refus d'ouverture, de corruption... 95% de ce genre de problèmes viennent de ces fichiers obèses: 2 à 2,5Mo semble la limte. Pour ma part je ne dépasse jamais 1,5 mo et essaie toujours de rester sous 1Mo.
Dans l'attente (absent cet aprem)
re,
Il m'a fallu Plus d'une demie-heure pour m'y retrouver dans ton classeur: rendre les feuilles, trouver l'usf concerné !...
Tu as des divergences de types dans tes feuilles dates et agence
pour les dates: en archives: dates en stat: texte
pour l'agence en archives: texte en stat: nombre
donc ca ne risque pas de marcher
rappel= un "textbox" renvoie du texte utilise la conversion en integer (cint) ou (val)
les dates étant en texte dans stats il faut transformer si possible la date dans archives en texte et au m^me format
Il m'a fallu Plus d'une demie-heure pour m'y retrouver dans ton classeur: rendre les feuilles, trouver l'usf concerné !...
Tu as des divergences de types dans tes feuilles dates et agence
pour les dates: en archives: dates en stat: texte
pour l'agence en archives: texte en stat: nombre
donc ca ne risque pas de marcher
rappel= un "textbox" renvoie du texte utilise la conversion en integer (cint) ou (val)
les dates étant en texte dans stats il faut transformer si possible la date dans archives en texte et au m^me format