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 :

probleme avec la fonction: FIND [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Retraite
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraite
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Points : 14
    Points
    14
    Par défaut probleme avec la fonction: FIND
    Bonjour tout le monde du forum,

    Me revoila avec mes questions!!!!!!!!!!!!

    Dans la macro ci-dessous, je fais une recherche d'un nom (NM1) de la feuille "brioche" dans la feuille"BL"; mon probleme est que si le nom n'existe pas dans "BL" je veux revenir dans "brioche", mais je ne trouve pas la bonne synthaxe.........

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If NM1.Find(cell.Value, LookIn:=xlValues) Is Nothing Then Sheets("brioche").Select
    Quelqu'un pourrait-il m'aider sur ceci S.V.P

    Merci d'avance, je sais que sur ce site il y a toujours des personnes sympas pour aider


    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
     
    Sub Macro25()
    '
    '
    ' copie de "brioche' vers "BL"
    '
    '
    Dim NM1 As String
     
    Sheets("brioche").Select
    If Worksheets("brioche").AutoFilterMode Then
        Selection.AutoFilter
        End If
     
        Range("B3").Select
        NM1 = ActiveCell.Value
        While ActiveCell <> ""
        Sheets("BL").Select
     
        If Worksheets("BL").AutoFilterMode Then
        Selection.AutoFilter
        End If
     
        Columns("B:B").Select
         Selection.Find(What:=NM1, After:=ActiveCell, LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=True, SearchFormat:=False).Select
     
     
            If NM1.Find(cell.Value, LookIn:=xlValues) Is Nothing Then Sheets("brioche").Select
     
     
     
        ActiveCell.Offset(0, 6).Select
        ActiveCell.Value = "X"
        Sheets("brioche").Select
        ActiveCell.Offset(1, 0).Select
        NM1 = ActiveCell.Value
     
     
        Wend
     
     
    End Sub

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Evite les Select/ activecell...

    Tu peux utiliser directement une formule excel.
    Sinon pour le code, regarde cette proposition de plus près
    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 Macro25()
    Dim NM1 As String
    Dim i As Long
    Dim c As Range
     
    Application.ScreenUpdating = False
    With Worksheets("brioche")
        .AutoFilterMode = False
        i = 3
        While .Range("B" & i).Value <> ""
            NM1 = .Range("B" & i).Value
            With Worksheets("BL")
                .AutoFilterMode = False
                Set c = .Range("B:B").Find(NM1, LookIn:=xlValues, LookAt:=xlWhole)
            End With
            If Not c Is Nothing Then
                c.Offset(0, 6).Value = "X"
                Set c = Nothing
            End If
            i = i + 1
        Wend
    End With
    End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Retraite
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraite
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    Merci mercatog pour cette reponse rapide...

    c'est super et cela fonctionne, mais mon probleme est que je voudrais que si NM1 n'est pas trouve en "BL" il revient sur la valeur en "brioche" afin de la copier pour la creer en "BL"

    Suis-je explicite????

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Il faudra comprendre le code, sinon...
    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
    Sub Macro25()
    Dim NM1 As String
    Dim i As Long
    Dim c As Range
     
    Application.ScreenUpdating = False
    With Worksheets("brioche")
        .AutoFilterMode = False
        i = 3
        While .Range("B" & i).Value <> ""
            NM1 = .Range("B" & i).Value
            With Worksheets("BL")
                .AutoFilterMode = False
                Set c = .Range("B:B").Find(NM1, LookIn:=xlValues, LookAt:=xlWhole)
                If Not c Is Nothing Then
                    c.Offset(0, 6).Value = "X"
                    Set c = Nothing
                Else
                    .Cells(.Rows.Count, "B").End(xlUp)(2) = NM1
                End If
            End With
            i = i + 1
        Wend
    End With
    End Sub

  5. #5
    Membre à l'essai
    Homme Profil pro
    Retraite
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraite
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    Merci mercatog,

    Je me suis permis de modifier un peu la fin de la macro par le truc suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Else
                Sheets("BL").Select
                Range("b500").Select
                Selection.End(xlUp).Offset(2, 0).Select
                Selection.Value = NM1
     
                ActiveCell.Offset(0, 6).Select
                ActiveCell.Value = "X"
     
     
            End If
    car ta version ne fonctionnait pas comme desire!

    En tout cas maintenant cela convient a ce que je voulais.... grand merci a toi

    Petite question par rapport a la maniere de composer la macro:
    quand tu utilise au debut
    WITH
    la suite est differente de ce que j'ai l'habitude de faire, du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .AutoFilterMode = False
    alors que moi j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Worksheets("brioche").AutoFilterMode Then
        Selection.AutoFilter
        End If
    Avantage ou inconvenient???

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Evite les Select/ activecell...

  7. #7
    Membre à l'essai
    Homme Profil pro
    Retraite
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraite
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    Re,

    EUH!!! je comprends pas tres bien la reponse!!!!!!!!!!!

    Merci de ton temps

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Worksheets("XXX").Select
    Range("A10").Select
    ActiveCell.Value = "YYY"
    Cette manière de coder est déconseillée (lenteur et instabilité du code entre autre)

    C'est largement mieux directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("XXX").Range("A10").Value = "YYY"
    Pour ton code
    Tu boucles sur la colonne B de ta feuille brioche et tu cherche les valeurs en colonne B de la feuille BL.
    Si la valeur est trouvée, tu écris X en colonne H
    Sinon, tu ajoute la nouvelle donnée en fin de colonne B de la feuille BL avec un X en colonne H

    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
    Sub Macro25()
    Dim NM1 As String
    Dim i As Long
    Dim c As Range
     
    Application.ScreenUpdating = False
    With Worksheets("brioche")
        .AutoFilterMode = False
        i = 3
        While .Range("B" & i).Value <> ""
            NM1 = .Range("B" & i).Value
            With Worksheets("BL")
                .AutoFilterMode = False
                Set c = .Range("B:B").Find(NM1, LookIn:=xlValues, LookAt:=xlWhole)
                If Not c Is Nothing Then
                    c.Offset(0, 6).Value = "X"
                    Set c = Nothing
                Else
                    With .Cells(.Rows.Count, "B").End(xlUp)
                        .Offset(1, 0) = NM1
                        .Offset(1, 6) = "X"
                    End With
                End If
            End With
            i = i + 1
        Wend
    End With
    End Sub
    Regarde le code, il n'y a aucun Select ni ActiveCell

  9. #9
    Membre à l'essai
    Homme Profil pro
    Retraite
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraite
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    Grand merci a toi mercatog et a tout le site, mon probleme est resolu

    Je vais essayer ta maniere de programmer en VBA, alors peut-etre que vous me retrouverez plus souvent sur le site

    En tout cas, encore merci et je recommande definitivement ce site

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

Discussions similaires

  1. probleme avec la fonction std::find
    Par APoLLoN1234 dans le forum SL & STL
    Réponses: 10
    Dernier message: 25/12/2007, 12h23
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 16h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 16h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 23h48

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