Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2011, 14h47   #1
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
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 :
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 !
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 14h51   #2
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
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 !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 14h55   #3
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
On est bien d'accord Jean-Pierre, j'ai moi-même écrit :

Citation:
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 !
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 14h57   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 899
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 899
Points : 7 185
Points : 7 185
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

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/09/2011, 14h58   #5
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Re:

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

Essais


Code :
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 !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/09/2011, 15h07   #6
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
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.
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 15h13   #7
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
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 !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 15h19   #8
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
Jean-Pierre,

Voilà mon code qui fonctionne :

Code :
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.
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 15h23   #9
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 899
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 899
Points : 7 185
Points : 7 185
Le End If sert a délimiter la fin du bloc If

Code :
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 :
If Macondition then Action
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/09/2011, 15h25   #10
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
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 !
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 15h30   #11
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
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 !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h13.


 
 
 
 
Partenaires

Hébergement Web