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 :

Chercher dans les valeurs d'une cellule dans une boucle For Next


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut Chercher dans les valeurs d'une cellule dans une boucle For Next
    Bonjour,

    Je vous colle ci-dessous un bout de code qui ne marche pas. Je suis certain qu'on pourrait faire plus simple mais malheuresement c'est avec ce type de boucle que je suis le plus à l'aise...
    En fonction du contenu d'une cellule d'une colonne, j'aimerai indiquer des comptes deux cellules plus à droite. La macro bloque car à priori le .Find n'est pas valide :

    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
        With Sheets("Retreated P&L")
     
        Dim LR3 As Byte, PNLAcc As Range
        LR3 = .Range("A" & .Rows.Count).End(xlUp).Row
     
        For Each PNLAcc In .Range("A2:A" & LR3)
            If PNLAcc.Find("702") Then
                PNLAcc.Offset(0, 2).Value = "702/1"
            Else
                If PNLAcc.Find("304") Then
                    PNLAcc.Offset(0, 2).Value = "702/2"
                Else
                    If PNLAcc.Find("Profit tax") Then
                        PNLAcc.Offset(0, 2).Value = "699"
                    Else
                        If PNLAcc.Find("721") Then
                            PNLAcc.Offset(0, 2).Value = "721/1"
                        Else
                            If PNLAcc.Find("Extraorinary income") Then
                                PNLAcc.Offset(0, 2).Value = "791"
                            Else
                                If PNLAcc.Find("621") Then
                                    PNLAcc.Offset(0, 2).Value = "621"
                                Else
                                    If PNLAcc.Find("624") Then
                                        PNLAcc.Offset(0, 2).Value = "624/1"
                                    Else
                                        If PNLAcc.Find("629") Then
                                            PNLAcc.Offset(0, 2).Value = "629"
                                        Else
                                            If PNLAcc.Find("Extraorinary expense") Then
                                                PNLAcc.Offset(0, 2).Value = "691"
                                            End If
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        Next PNLAcc
     
        End With
    Pouvez-vous m'aider SVP ? De la même manière, si vous avez une solution moins lourde, plus digeste, je suis perneur mais il va falloir être patient et m'expliquer
    D'avance merci !
    Runsh

  2. #2
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Bonjour,

    ce genre de test est indigeste

    regarde du coté

    Select case

    Bon courage
    Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
    ---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------

  3. #3
    Membre confirmé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut
    On est bien d'accord Jean-Pierre, j'ai moi-même écrit :

    Je suis certain qu'on pourrait faire plus simple mais malheuresement c'est avec ce type de boucle que je suis le plus à l'aise...
    Je vais regarder du côté des Select Case, en espérant que je comprenne, ça me donnera matière à forger Merci pour le tuyau en tout cas !
    Runsh

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Find recherche dans une plage de cellule un jeu de caractères et retourne un range. Il faut donc l'instancier avec un Set
    Dans ton cas, si ta recherche se situe dans la cellule, utilise plutôt instr
    Jérôme

  5. #5
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Re:

    Je n'avais pas vue que tu faisait une recherche avec Find

    Essais


    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
        Dim LR3 As Byte, PNLAcc As Range
        LR3 = .Range("A" & .Rows.Count).End(xlUp).Row
     
            For Each PNLAcc In .Range("A2:A" & LR3)
                If PNLAcc.Find("702") Then PNLAcc.Offset(0, 2).Value = "702/1"
                If PNLAcc.Find("304") Then PNLAcc.Offset(0, 2).Value = "702/2"
                If PNLAcc.Find("Profit tax") Then PNLAcc.Offset(0, 2).Value = "699"
                If PNLAcc.Find("721") Then PNLAcc.Offset(0, 2).Value = "721/1"
                If PNLAcc.Find("Extraorinary income") Then PNLAcc.Offset(0, 2).Value = "791"
                If PNLAcc.Find("621") Then PNLAcc.Offset(0, 2).Value = "621"
                If PNLAcc.Find("624") Then PNLAcc.Offset(0, 2).Value = "624/1"
                If PNLAcc.Find("629") Then PNLAcc.Offset(0, 2).Value = "629"
                If PNLAcc.Find("Extraorinary expense") Then PNLAcc.Offset(0, 2).Value = "691"
            Next PNLAcc
     
        End With

    Tu dis

    Bon courage
    Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
    ---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------

  6. #6
    Membre confirmé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut
    J'ai essayé la méthode jfontaine et elle fonctionne parfaitement.
    J'ai testé la tienne et ça me ressort le même message d'erreur qu'avec mon code indigeste, à savoir "Object variable not set", ce que je comprends mieux avec les explications de jfontaine - qui fait le boulot le plus sympa du monde, soit dit en passant -
    J'imagine qu'avec cette méthode ça serait mieux, et j'irai également voir du côté des Select Case, ça m'enrichira.
    Runsh

  7. #7
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Jfontaine à raison,

    si tu utilise instr dans le code que j'ai modifié cela devrait fonctionné.


    Bon courage
    Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
    ---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------

  8. #8
    Membre confirmé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut
    Jean-Pierre,

    Voilà mon code qui fonctionne :

    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
     For Each PNLAcc In .Range("A2:A" & LR3)
            If InStr(PNLAcc, "702") Then
                PNLAcc.Offset(0, 2).Value = "702/1"
            Else
                If InStr(PNLAcc, "304") Then
                    PNLAcc.Offset(0, 2).Value = "702/2"
                Else
                    If InStr(PNLAcc, "Profit tax") Then
                        PNLAcc.Offset(0, 2).Value = "699"
                    Else
                        If InStr(PNLAcc, "721") Then
                            PNLAcc.Offset(0, 2).Value = "721/1"
                        Else
                            If InStr(PNLAcc, "Extraordinary income") Then
                                PNLAcc.Offset(0, 2).Value = "791"
                            Else
                                If InStr(PNLAcc, "621") Then
                                    PNLAcc.Offset(0, 2).Value = "621"
                                Else
                                    If InStr(PNLAcc, "624") Then
                                        PNLAcc.Offset(0, 2).Value = "624/1"
                                    Else
                                        If InStr(PNLAcc, "629") Then
                                            PNLAcc.Offset(0, 2).Value = "629"
                                        Else
                                            If InStr(PNLAcc, "Extraordinary expense") Then
                                                PNLAcc.Offset(0, 2).Value = "691"
                                            End If
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        Next PNLAcc
    Par contre je serai curieux de voir comment le dégrossir sur la base de ton code, où tu n'as pas un seul End If. Sais-tu si c'est possible ? Si oui je suis preneur pour ma culture perso ainsi que pour degrossir ce gros bloc illisible.
    Runsh

  9. #9
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Le End If sert a délimiter la fin du bloc If

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Macondition then
         ... Code ...
    End If
    Dans le cas ou le code action est cours, on peut synthètiser sur une seule ligne en s'abstenant de mettre le End if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Macondition then Action
    Jérôme

  10. #10
    Membre confirmé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut
    Je suis bête, ça fonctionne en prenant ton code et en modifiant avec instr.
    Du coup plus de End If. Je croyais qu'un If entrainaît obligatoirement un End If, tout comme un With entraîne nécessairement un End With. Aurais-tu la patience et la bonté de m'expliquer pourquoi tu peux t'en passer STP?
    Je comprendrai facilement un refus de ta part

    Et bien voilà, j'ai ma réponse. Merci beaucoup à tous les deux pour vos réponses utiles et votre précieuse aide !
    Runsh

  11. #11
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Runsh,

    Jfontaine vient de le faire


    Bon courage
    Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
    ---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/03/2013, 17h07
  2. Réponses: 0
    Dernier message: 06/06/2011, 13h31
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. [XL-2007] Renvoyer la valeur d'une cellule dans les en tête et pied de page.
    Par bedoch dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/07/2009, 09h02
  5. Réponses: 3
    Dernier message: 13/01/2009, 16h55

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