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 :

Range.find avec formules et Variables


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Janvier 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Janvier 2016
    Messages : 16
    Par défaut Range.find avec formules et Variables
    Bonjour à tous,

    Je vous écris pour avoir un peu d'aide car j'arrive au bout du bout de mes recherches
    Contexte : j'ai commencé VBA Excel il y a une semaine...


    Probléme :
    Dans une feuille ("Calcul") j'ai un tableau ("$I$64:$N$69") rempli de Chiffres décimaux renseigné par des formules auparavant.
    J'ai crée un Userform qui :
    • Trouve le nombre le plus grand dans le tableau >> OK
    • Me donne la colonne et la ligne du chiffre le plus grand >> NOK


    J'ai l'impression qu'une fois qu'il me donne le nombre en question (Encapsulé en variable "Nummax") il ne le retrouve plus dans le tableau
    J'ai testé d'écrire "Bleu" dans une des cellules du tableau et faire recherché "Bleu" dans le script >> OK donc la commande est bonne.


    J'ai donc testé pas mal de chose avant de vous écrire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Nummax As Variant
    Nummax = CDec(Application.WorksheetFunction.Max(Sheets("Calcul").Range("$I$64:$N$69")))
    MsgBox Nummax
    mcrow = Sheets("Calcul").Range("$I$64:$N$69").Find(Nummax).Row
    MsgBox mcrow
    mcline = Sheets("Calcul").Range("$I$64:$N$69").Find(Nummax).Column
    MsgBox mcline
    If mcline Is Nothing Then MsgBox ("Pas colone")
    If mcrow Is Nothing Then MsgBox ("Pas ligne")

    Code erreur :

    Erreur 91
    Variable objet ou variable bloc With non définie

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    voici une petite modification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim Nummax As Variant
     
        On Error Resume Next
     
        Nummax = CDec(Application.WorksheetFunction.Max(Sheets("Calcul").Range("$I$64:$N$69")))
        MsgBox Nummax
        mcrow = Sheets("Calcul").Range("$I$64:$N$69").Find(Nummax).Row
        MsgBox mcrow
        mcline = Sheets("Calcul").Range("$I$64:$N$69").Find(Nummax).Column
        MsgBox mcline
        If mcline = 0 Then MsgBox ("Pas colone")
        If mcrow = 0 Then MsgBox ("Pas ligne")
    Le on error resume next est là pour éviter l'affichage de la fenêtre de débeugage.
    Il est nécessaire si tu lance ta macro et que ta place est vide.
    Dans ce cas, il na te dire que la plus grande valeur est 0.
    Mais quand tu vas lancer la recherche de ce 0, il ne va pas le trouver et çà va planter.

    Enfin, pour ton pb, j'ai remplacer ta condition par un simple = 0.

    Et la tout va bien.

    GG

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Code erreur :
    Erreur 91
    Variable objet ou variable bloc With non définie
    Signaler que l'on a une erreur dans une procédure sans indiquer le numéro de la ligne du code publié n'a aucun sens à moins d'avoir une boule de cristal ou demander au lecteur de chercher lui-même où aurait pu avoir lieu cette erreur.

    Le type de message d'erreur me laisse penser que toute la procédure n'est pas affichée car on ne voit pas de bloc With...End With ou plutôt son début car ce message d'erreur semble signaler l'absence du End With
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 022
    Par défaut
    Salut

    Citation Envoyé par Basss974 Voir le message
    Dans une feuille ("Calcul") j'ai un tableau ("$I$64:$N$69") rempli de Chiffres décimaux renseigné par des formules auparavant.
    J'ai crée un Userform qui :
    • Trouve le nombre le plus grand dans le tableau >> OK
    • Me donne la colonne et la ligne du chiffre le plus grand >> NOK

    Pourrais tu nous montrer comment sont organisées ces info dans ton tableau?
    Ce que fait ta macro, pour l'instant Excel sait le faire avec des formules sans VBA
    La plage $I$64:$N$69 ne changera jamais? Ou alors il faut la rendre dynamique (Etiquette ou mieux Tableau Structutré)
    Pour moi "On Error Resume Next, ne devrait jamais être utiliser en début de code mais juste ponctuellement pour gérer un cas "ingérable" ou pour facilité sa gestion du moins.
    Typiquement ici, il n'y en a pas besoin
    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
    Sub teste()
    Dim Nummax As Double
    Dim aCell As Range
    Dim mcLine as Integer
    Dim mcRow as Long
        'On pointe la feuille de travail
        With ThisWorkbook.Sheets("Calcul")
            Nummax = CDec(Application.WorksheetFunction.Max(.Range("$I$64:$N$69").Value))
     
            MsgBox Nummax
            'On cherche si une cellule correspond
            Set aCell = .Range("$I$64:$N$69").Find(Nummax)
            'On regarde si une cellule correspond (Si plusieurs cellules contiennent cette valeur c'est la 1ère qui est retournée)
            If Not aCell Is Nothing Then
                mcrow = aCell.Row
                MsgBox mcrow
                mcline = aCell.Column
                MsgBox mcline
            Else
                MsgBox "Pas de cellule correspondante à " & Nummax & "."
            End If
        End With
    End Sub

    [Edit]
    Pour info, "Is" est réservé à la comparaison d'objet. aCell est un objet. mcLine et mcRow sont des variables (ici de type numérique).
    [/Edit]
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Janvier 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Janvier 2016
    Messages : 16
    Par défaut
    Merci a vous déja d'avoir répondu.

    Pourrais tu nous montrer comment sont organisées ces info dans ton tableau?
    Ce que fait ta macro, pour l'instant Excel sait le faire avec des formules sans VBA
    La plage $I$64:$N$69 ne changera jamais? Ou alors il faut la rendre dynamique (Etiquette ou mieux Tableau Structutré)
    En effet la plage ne bougeras jamais
    Le tableau est rempli avec des sommeProd.

    Nom : tableau.PNG
Affichages : 1182
Taille : 14,6 Ko

    Le but de la macro est :
    • Trouver le chiffre le plus gros
    • Trouver pour le chiffre le plus haut les valeurs associé "a son adresse" (Cellules bleues)
    • Afficher les valeurs dans le UserForm


    Exemple:
    Dans le tableau la valeur la plus haute est : 6,190963777
    Je veut que dans mon UserForm s'affiche : 1&1

    Donc si vous avez un moyen plus simple de me le sortir je ne suis pas contre non plus

    Merci

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 022
    Par défaut
    Salut

    Une solution via une formule matricielle.
    Je pensais que ça aller être simple... mais pas tant que ça en fait
    Pour expliquer les différents étapes sont représentée mais la dernière formule fonctionne seule.

    ++
    Qwaz
    Fichiers attachés Fichiers attachés

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. [XL-2010] Range.Find avec valeur cherchée en variable texte (String)
    Par Dédé6621 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/08/2018, 09h34
  2. Utilisation d'un cells.find avec texte et variable
    Par remi2305 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/05/2015, 10h55
  3. Find avec paramètre string variable
    Par internaute1 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/02/2014, 00h05
  4. vba range selection avec variable
    Par pierre.paumier dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/12/2007, 03h04
  5. Réponses: 2
    Dernier message: 05/07/2007, 14h24

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