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 d'imbrication de With ? [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Par défaut Problème d'imbrication de With ?
    Bonjour à tous,

    Débutant en VBA, j'aurai besoin de vos lumières.

    Je développe des petites automatisations sur un fichier Excel pour un gain de temps mais je rencontre un petit problème.

    Tout d'abord le code avec les fontions utilisées :

    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
     
    Private Sub MonteeExport_Click()
     
    Dim MaPlage As Range, Trouve As Range
    Dim NomFichier As String
    Dim DerniereLigneNonVide As Integer, NumColExport As Integer
    Dim Adresse1 As String
     
    DerniereLigneNonVide = Sheets("SUIVI_OBJETS").Range("D65536").End(xlUp).Row
     
    NumColExport = NumColonneExportSelectionne
     
    If Me.ListeExport <> "" Then
        If NumColExport <> Nul And NumColExport > 0 Then
            Set MaPlage = Sheets("SUIVI_OBJETS").Range(Cells(6, NumColExport), Cells(DerniereLigneNonVide, NumColExport))
            Set Trouve = MaPlage.Find("x", MaPlage.Cells(1), xlValues, xlWhole, xlByRows, xlNext)
     
            If Not Trouve Is Nothing Then
                Adresse1 = Trouve.Address
                NomFichier = Range("D" & Trouve.Row).Value
                If Me.RecetteE = True Then
                    Do
                        DecocheOldVersion DerniereLigneNonVide, NomFichier, "G"
                        Sheets("SUIVI_OBJETS").Range("G" & Trouve.Row).Value = "x" 'Environnement recette
                        Sheets("SUIVI_OBJETS").Range("K" & Trouve.Row).Value = TranscoQuadri 'Quadrigramme responsable
                        Sheets("SUIVI_OBJETS").Range("L" & Trouve.Row).Value = Date 'Date installation recette
                    Set Trouve = MaPlage.FindNext(Trouve)
                    Loop While StrComp(Adresse1, Trouve.Address) <> 0
                Else
                    Do
                        DecocheOldVersion DerniereLigneNonVide, NomFichier, "H"
                        Sheets("SUIVI_OBJETS").Range("H" & Trouve.Row).Value = "x" 'Environnement production
                        Sheets("SUIVI_OBJETS").Range("M" & Trouve.Row).Value = TranscoQuadri 'Quadrigramme responsable
                        Sheets("SUIVI_OBJETS").Range("N" & Trouve.Row).Value = Date 'Date installation recette
                    Set Trouve = MaPlage.FindNext(Trouve)
                    Loop While StrComp(Adresse1, Trouve.Address) <> 0
                End If
            End If
        Else
            MsgBox "Export inexistant, utilisez de préférence la liste déroulante.", vbInformation, "Erreur de mise à jour"
        End If
    Else
        MsgBox "Vous devez entrer le nom du document mis à jour.", vbInformation, "Erreur de mise à jour"
        Me.ListeExport.SetFocus
    End If
     
    End Sub
     
     
    Private Function NumColonneExportSelectionne()
     
    Dim MaPlage As Range, Cell As Range
    Dim DerniereColonneNonVide As Integer
     
    DerniereColonneNonVide = Sheets("SUIVI_OBJETS").Range("P2").End(xlToRight).Column - 2
     
    For Each Cell In Sheets("SUIVI_OBJETS").Range(Cells(2, 16), Cells(2, DerniereColonneNonVide))
        If Cell.Value = Me.ListeExport Then
            NumColonneExportSelectionne = Cell.Column
        End If
    Next Cell
     
    End Function
     
     
    Private Sub DecocheOldVersion(ByVal DerniereLigneNonVide As Integer, ByVal NomFichier As String, ByVal Environnement As String)
     
    Dim MaPlage As Range, Trouve As Range
    Dim Adresse As String
     
    Set MaPlage = Sheets("SUIVI_OBJETS").Range(Cells(6, 4), Cells(DerniereLigneNonVide, 4))
    Set Trouve = MaPlage.Find(NomFichier, MaPlage.Cells(1), xlValues, xlWhole, xlByRows, xlNext)
     
    If Not Trouve Is Nothing Then
        Adresse = Trouve.Address
        Do
            Sheets("SUIVI_OBJETS").Range(Environnement & Trouve.Row).Value = "" ' Decoche l ancienne version
        Set Trouve = MaPlage.FindNext(Trouve)
        Loop While StrComp(Adresse, Trouve.Address) <> 0
    End If
    End Sub
    L'erreur se situe dans la proc MonteeExport_Click() sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Loop While StrComp(Adresse1, Trouve.Address) <> 0
    Erreur renvoyée : Variable objet ou variable bloc With non définie (erreur 91)

    Je pense que l'erreur vient du fait que dans ma procédure DecocheOldVersion, je parcours une autre plage, et donc de l'imbrication de "with" (entre guillemets).
    J'ai vu quelques sujets sur ce problème, essayé de mettre des with end with mais sans réussite...

    Merci de votre aide.
    et comme je suis débutant en VBA, si vous avez quelques remarques sur mon code n'hésitez pas.

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Le problème à mon avis, c'est qu'au bout d'un moment, Trouve devient Nothing car il ne trouve plus rien, du coup, tu ne peux plus lui demander son Address.
    C'est bien sûr une première remarque sans avoir essayé de comprendre ton code. Tu vois quoi dans Trouve dans le débuggeur au moment de l'erreur ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Par défaut
    Oui dans mon Trouve j'ai Nothing au moment du FindNext.
    Mais justement ca ne devrait pas être le cas car il y a bien d'autres cellules à parcourir dans la plage.

    Donc soit j'alimente mal ma plage soit il se perd dans les with soit je persiste à chercher l'erreur à l'endroit qu'elle n'est pas ...

  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Je ne vois pas pourquoi tu parles de "with" depuis le début vu qu'il n'y en a pas dans ton code. Et ta plage à l'air bien alimentée.
    J'essaierais de savoir la dernière cellule "x" trouvée avant que ça plante (En pas à pas ou avec des Debug.Print Adresse1 s'il y en a beaucoup), pour essayer une recherche manuelle ensuite et voir ce qui se passe.

    Une idée toute bête, essaie de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Trouve = MaPlage.FindNext(Trouve)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Trouve = MaPlage.FindNext
    S'il n'y avait qu'un "x", ça pourrait être le souci

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Par défaut
    J'ai testé en enlevant le (Trouve), mais toujours le même message d'erreur.

    Dans un Test, j'ai mis 4 "x" (Ligne 1444-1445-1446-1447)

    Il fait bien les changements de valeurs pour la ligne 1444 mais plante avant d'atteindre la ligne suivante.

  6. #6
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Et ce ne serait pas par hasard parce que DecocheOldVersion enlèves les "x" ? Du coup, il n'y en a plus au FindNext suivant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Encore problème d'imbrication de boucles
    Par flora806 dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2008, 15h25
  2. Réponses: 1
    Dernier message: 17/01/2007, 17h59
  3. [Dataset] Problème d'imbrication de données
    Par 6psyk9 dans le forum VB.NET
    Réponses: 1
    Dernier message: 17/01/2007, 14h36
  4. [VB .Net 2005][Dataset] Problème d'imbrication de données
    Par 6psyk9 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/01/2007, 14h24
  5. Problème avec imbrication de tableaux
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 11/07/2006, 21h59

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