IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur sur la Fonction Selection.Find VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2022
    Messages : 5
    Par défaut Erreur sur la Fonction Selection.Find VBA
    Bonjour,

    L'objectif de ma macro est de trouver les 3 plus grandes valeurs dans une colonne d'une semaine X. Le format de cellule de ces valeurs est monétaire . Les colonnes sont les 52 semaines. Je note ces valeurs dans la colonne BI. Jusque là, pas de soucis.
    Ensuite je cherche à trouver la désignation (se trouvant en A1) de ces valeurs et les noter en colonne BJ.
    Dans la ligne Selection.find, j'ai l'erreur suivante : Erreur d'exécution '91'. Variable object ou variable de bloc With non définie. Je suppose que c'est au niveau du What que cela pose problème. Lorsque je lance ma macro, la variable Top1 a bien une valeur associée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Range(Cells(2, ColonneE), Cells(derniereligneE, ColonneE)).Select
    Application.FindFormat.NumberFormat = "#,##0.00 $"
    Selection.Find(What:=€ & Top1, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
    Lignetop1 = ActiveCell.Row
    Defauttop1 = Range("A" & Lignetop1)
    Range("A" & Lignetop1).Select
    Range("BJ3").Value = Defauttop1
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.Find(What:=Top1, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
    mais cela ne fonctionne pas non plus.

    Il me sélectionne bien la colonne de la semaine demandée.

    Cette formule fonctionnait sur une autre version d'Excel. Sur Excel 2016 pro, elle me met l'erreur.

    J'ai défini mes variables tel quel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Dim SemaineSaisieE As Byte
        Dim ColonneE As Integer
        Dim derniereligneE As Integer
        Dim SemaineE As String
        Dim Top1, Top2, Top3 As Currency
        Dim Lignetop1, Lignetop2, Lignetop3 As String
        Dim Defauttop1, Defauttop2, Defauttop3 As String
    Comment résoudre cette erreur svp ?
    Merci par avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Salut premierement bienvenue sur le forum,

    Pour inserer le code tu peux te servir de la balise "#" c'est beaucoup plus lisible !

    En suite dans ta fonction il me semble que le signe "€" n'est pas entre guillemets alors que c'est un caratere (string), c'est surement pour cette raison que ca ne fonctionne pas.

    cdt

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2022
    Messages : 5
    Par défaut
    Citation Envoyé par ChristianBosch Voir le message
    Salut premierement bienvenue sur le forum,

    Pour inserer le code tu peux te servir de la balise "#" c'est beaucoup plus lisible !

    En suite dans ta fonction il me semble que le signe "€" n'est pas entre guillemets alors que c'est un caratere (string), c'est surement pour cette raison que ca ne fonctionne pas.

    cdt
    Bonjour,

    Merci pour l'info de la balise je ne savais pas comment faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Range(Cells(2, ColonneE), Cells(derniereligneE, ColonneE)).Select
    Application.FindFormat.NumberFormat = "#,##0.00 $"
    Selection.Find(What:="€" & Top1, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
    Lignetop1 = ActiveCell.Row
    Defauttop1 = Range("A" & Lignetop1)
    Range("A" & Lignetop1).Select
    Range("BJ3").Value = Defauttop1
    J'ai essayé avec les guillemets. Cela me met le même message d'erreur. J'ai mis le signe euros pour indiquer que c'est un type monétaire.

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Je pense que cette erreur indique que la recherche n'a pas aboutit car quand tu mets ".activate" etant donné que le "find" doit etre a "nothing" la méthode n'a pas d'objet pour travailler.

    Si il y a une possibilité que la méthode find ne trouve pas il faut faire une gestion d'erreur sur le find avant d'executer le ".activate"

    Apres j'ai pas bien compris ce que tu voulais faire avec le "€", si tes cellules sont au format monaitaire alors tu n'as pas besoin de preciser la devise il te faut seulement indiquer la valeur dans ta rechercher qui correspond a "top1" j'imagine, retire le "€". Le formatage n'est qu'une sur couche que Excel rajoute pour l'affichage de certaines valeur (ici ajouter le sigle "€") mais la valeur de ta cellule ne change pas.

    cdt,

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2022
    Messages : 5
    Par défaut
    Pourtant la valeur qu'il cherche existe car c'est une valeur qu'il a déjà récupérer dans la colonne.
    Je vais mettre le code en entier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    Sub Graphique_Ligne_E()
     
    'Définitions des valeurs max de rebuts entre code défaut
     
        Dim SemaineSaisieE As Byte
        Dim ColonneE As Integer
        Dim derniereligneE As Integer
        Dim SemaineE As String
        Dim Top1, Top2, Top3 As Currency
        Dim Lignetop1, Lignetop2, Lignetop3 As String
        Dim Defauttop1, Defauttop2, Defauttop3 As String
     
     
    Sheets("Récapitulatif_Ligne E").Select
     
    'Saisie du numéro de la semaine
     
    On Error Resume Next
    10:
    SemaineSaisieE = InputBox("Merci de saisir le numéro de semaine à étudier :", "Numéro de semaine à renseigner", "12")
    If Err.Number <> 0 Then
        Exit Sub
    ElseIf SemaineSaisieE = 0 Or SemaineSaisieE > 52 Then
        MsgBox "Erreur de saisie de la semaine." & vbNewLine & "Merci d'indiquer un nombre entre 1 et 52."
        GoTo 10
    End If
     
    On Error GoTo 0
     
    SemaineE = "S" & SemaineSaisieE
     
    'Trouver la dernière ligne du tableau
     
    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.End(xlDown).Select
    derniereligneE = ActiveCell.Row
     
    'Rechercher la colonne de la semaine demandée précedemment
    Range("C1").Activate
    Cells.Find(What:=SemaineE, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
     
     
    ColonneE = ActiveCell.Column
     
    ' Ecrire les 3 plus grandes valeurs de la colonne
     
    Range("BI3").Select
    ActiveCell.FormulaR1C1 = "=LARGE(R2C" & ColonneE & ":R" & derniereligneE & "C" & ColonneE & ",1)"
    Top1 = ActiveCell.Value
    Range("BI4").Select
    ActiveCell.FormulaR1C1 = "=LARGE(R2C" & ColonneE & ":R" & derniereligneE & "C" & ColonneE & ",2)"
    Top2 = ActiveCell.Value
    Range("BI5").Select
    ActiveCell.FormulaR1C1 = "=LARGE(R2C" & ColonneE & ":R" & derniereligneE & "C" & ColonneE & ",3)"
    Top3 = ActiveCell.Value
     
    'Chercher la désignation des trois plus grandes valeurs trouvées
     
    Range(Cells(2, ColonneE), Cells(derniereligneE, ColonneE)).Select
    'Application.FindFormat.NumberFormat = "#,##0.00 $"
    Selection.Find(What:=Top1, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
    Lignetop1 = ActiveCell.Row
    Defauttop1 = Range("A" & Lignetop1)
    Range("A" & Lignetop1).Select
    Range("BJ3").Value = Defauttop1
     
    'Range(Cells(2, ColonneE), Cells(derniereligneE, ColonneE)).Select
    'Application.FindFormat.NumberFormat = "#,##0.00 $"
    'Selection.Find(What:=€ & Top2, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
    'Lignetop2 = ActiveCell.Row
    'Defauttop2 = Range("A" & Lignetop2)
    'Range("A" & Lignetop2).Select
    'Range("BJ4").Value = Defauttop2
     
    'Range(Cells(2, ColonneE), Cells(derniereligneE, ColonneE)).Select
    'Application.FindFormat.NumberFormat = "#,##0.00 $"
    'Selection.Find(What:=€ & Top3, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
    'Lignetop3 = ActiveCell.Row
    'Defauttop3 = Range("A" & Lignetop3)
    'Range("A" & Lignetop3).Select
    'Range("BJ5").Value = Defauttop3
     
    'Range("BL4").Select
     
     
     
    End Sub
    Mais sinon comment je gère l'erreur s'il ne trouve pas la valeur?

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Il faut passer par une variable de type "Range" tu la declare :

    En suite tu stocke la cellule trouvée dedans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set MyRange=Selection.Find(What:=Top1, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    Apres tu teste la valeur de ta variable MyRange :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If MyRange Is Nothing Then
        MsgBox "Valeur non trouvée sur la plage"
    Else
        MyRange.Activate
    End If
    CB

Discussions similaires

  1. [MySQL] Erreur sur la fonction mysql_result()
    Par nico26 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 31/01/2007, 15h50
  2. erreur sur la requete present dans vba
    Par laurent.w dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/01/2007, 09h26
  3. erreur sur une fonction
    Par rimbaut dans le forum C
    Réponses: 3
    Dernier message: 01/04/2006, 17h28
  4. Infos sur la fonction select en C
    Par oook dans le forum C
    Réponses: 8
    Dernier message: 07/12/2005, 15h15
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo