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 :

Problème de variable (fontion find)


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Points : 72
    Points
    72
    Par défaut Problème de variable (fontion find)
    Bonjour à tous,

    Je dispose de 2 sheets :
    1er sheets : Base de données mise à jour manuellement, on a dans la colonne B, le nom de différents mandats, et pour chaque mandat, entre les colonnes E et I, on a une allocation d'actif.

    J'effectue une macro qui me permet d'effectuer un copié des allocations pour chaque mandat dans un sheets(2) (Le rapport)

    J'obtiens une erreur car il ne trouve pas de valeur dans ma variable "mdt".

    Une idée d'où cela pourrais venir ?

    Voici mon code :
    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
    Sub Test_Update()
    
    Dim i, j, x, y As Integer
    Dim mdt, dte, cell, cel, ce As Range
    Dim match As Date
    
    match = DateSerial(Year(Date), Month(Date) + 1, 0)
    
    '-----------------------------------------------------
    Sheets(1).Activate                           'Sur le Sheets(1): la BDD
    For Each cell In Range("B4:B50")             'Pour chaque cellule du range de la BDD
        Sheets(1).Activate                       'Sur le Sheets(1): la BDD
        i = cell.Row                             'i est le numéro de ligne
        Range(Cells(i, 5), Cells(i, 9)).Select   'On passe le range de chaque mandat
        Selection.Copy                           'On copie le range
        
    '-----------------------------------------------------
    Sheets(2).Activate                           'Sur le Sheets(2): le rapport
        Set ce = Range("C6:ON6")
        Set cel = Range("B8:B80")
        Set mdt = ce.Find(cell.Value, LookIn:=xlValues)
        Set dte = cel.Find(match, LookIn:=xlValues)
        
        If Not mdt Is Nothing Then
            cell.Value = mdt.Value
        Else
            Range(Cells(dte.Row, mdt.Row), Cells(dte.Row, mdt.Row + 5)).Select
            Selection.Insert
        End If
    
    Next
    
    End Sub
    J'ai l'erreur : Erreur d'éxecution 91 : Variable objet ou variable de bloc With non définie

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour,
    ma réponse se limitera à celle que tu vas te donner toi-même à cette question :
    que pourrait-être dte.row si dte is nothing ? (en résultat de ta recherche "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cel.Find(match, LookIn:=xlValues)
    ") ?
    commence donc (réflexe 1) par contrôler le résultat d'une telle "recherche". Cela sera un bon début de réflexion.
    PS (et de manière annexe) :

    quel est selon toi le type affecté à i,j,x,mdt,dte,cell,cel par ces deux lignes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim i, j, x, y As Integer
    Dim mdt, dte, cell, cel, ce As Range
    Amuse-toi à le faire par utilisation de TypeName, juste pour voir.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Si les dates dans les champs de recherche ne sont pas le résultat de formules, tu peux remplacer xlValues par xlFormulas.

    Ce qui te donnerait :
    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
    Sub Test_Update()
     
    Dim i, j, x, y As Integer
    Dim mdt, dte, cell, cel, ce As Range
    Dim match As Date
     
    match = DateSerial(Year(Date), Month(Date) + 1, 0)
     
    '-----------------------------------------------------
    Sheets(1).Activate                           'Sur le Sheets(1): la BDD
    For Each cell In Range("B4:B50")             'Pour chaque cellule du range de la BDD
        Sheets(1).Activate                       'Sur le Sheets(1): la BDD
        i = cell.Row                             'i est le numéro de ligne
        Range(Cells(i, 5), Cells(i, 9)).Select   'On passe le range de chaque mandat
        Selection.Copy                           'On copie le range
     
    '-----------------------------------------------------
    Sheets(2).Activate                           'Sur le Sheets(2): le rapport
        Set ce = Range("C6:ON6")
        ce.Select
        Set cel = Range("B8:B80")
        cel.Select
        Set mdt = ce.Find(cell.Value, LookIn:=xlFormulas)
        Set dte = cel.Find(match, LookIn:=xlFormulas)
     
        If Not mdt Is Nothing Then
            cell.Value = mdt.Value
        Else
        If dte Is Nothing Then
            MsgBox dte & " non trouve dans " & cel.Address
        Else
            Range(Cells(dte.Row, mdt.Row), Cells(dte.Row, mdt.Row + 5)).Select
            Selection.Insert
        End If
        End If
     
    Next
     
    End Sub
    Cordialement

    Docmarti.

Discussions similaires

  1. [XL-2013] Problème de variable (fontion find)
    Par Ghost0000 dans le forum Excel
    Réponses: 2
    Dernier message: 09/04/2016, 21h12
  2. [Debutant(e)]problème de variable d'environnement
    Par tolsam dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 12/08/2004, 19h08
  3. Problème de variable
    Par vp dans le forum Windows
    Réponses: 2
    Dernier message: 14/05/2004, 16h27
  4. [Débutant] Problème de variables
    Par bonnefr dans le forum SWT/JFace
    Réponses: 9
    Dernier message: 12/05/2004, 17h41
  5. [servlet]problème de variable jamais nulle
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/03/2004, 09h31

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