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 :

Correction code Recherche VBA [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Correction code Recherche VBA
    bonjour a tous,

    je viens vers vous car je ne comprends pas mon erreur.
    j'ai regardé plusieurs fois le codes mais je n'arrive pas a voir l'erreur.

    J'ai plusieurs feuilles dans mon classeur ( gestion de stock ), je souhaite faire une recherche en fonction de la feuille.

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    Option Explicit
    Dim WS As Worksheet   'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de ce UserForm
    Dim ChoixOuiNon As String
     
     
    Private Sub OptionButton1_Click()
    If OptionButton1 = True Then ChoixOuiNon = "Consommable Divers"
    Ini
    End Sub
    Private Sub OptionButton2_Click()
    If OptionButton2 = True Then ChoixOuiNon = "Produit Chimique"
    Ini
    End Sub
    Private Sub OptionButton3_Click()
    If OptionButton3 = True Then ChoixOuiNon = "Outillage elec_pneum"
    Ini
    End Sub
    Private Sub OptionButton4_Click()
    If OptionButton4 = True Then ChoixOuiNon = "Outillage a main"
    Ini
    End Sub
    Private Sub OptionButton5_Click()
    If OptionButton5 = True Then ChoixOuiNon = "E.P.I."
    Ini
    End Sub
    Private Sub OptionButton6_Click()
    If OptionButton6 = True Then ChoixOuiNon = "consommable Composite"
    Ini
    End Sub
     
     
    Private Sub CommandButton2_Click()
    Unload Me
    End Sub
     
    Private Sub Ini()
     
    Dim PageRefRecherche As String
    Dim ctrl As Control 'Variable pour la collection des controls
    Dim L As Integer    'Variable pour connaitre le numéro de derniere ligne
    Dim i As Integer    'Variable pour connaitre incrémenter les Data
    'On Vide tous les Controls
    For Each ctrl In Me.Controls
    If TypeOf ctrl Is MSForms.Label Then ctrl = ""
     
    PageRefRecherche = ChoixOuiNon
     
    Next ctrl
    Me.ComboBox1.Clear 'On vide les précédentes données
    Set WS = ThisWorkbook.Sheets(PageRefRecherche) 'On identifie l'objet pour la feuille de travail
    L = WS.Range("A65536").End(xlUp).Row    'On identifie la dernière ligne en partant du bas
    'Pour éviter les fash d'écran pour le select ci dessous
    Application.ScreenUpdating = False
        WS.Select 'On sélectionne la feuille sinon bug si elle ne l'est pas
     
     
    For i = 2 To L             'Boucle départ 2 (Ligne 2 de la feuille, jusqu'à dernière
    With Me.ComboBox1         'Avec la ComboBox1
    .AddItem WS.Range("A" & i) 'On ajoute dans la ComboBox toutes les valeurs, cellules après cellules
    End With
    Next i                     'Next pour poursuivre la boucle pour le i suivant
    Application.ScreenUpdating = True
    End Sub
     
    Private Sub CommandButton1_Click()
     
        Dim PageRefRecherche As String
        Dim X, occurence As Integer
        Dim R As Range
        Dim ligne As Long
        Dim trouve As Boolean 'déclare la variable trouvé
     
     
        PageRefRecherche = ChoixOuiNon
     
        If ComboBox1.Value <> "" Then
     
            ThisWorkbook.Sheets("Recherche").Range("A2:H" & ThisWorkbook.Sheets("Recherche").Range("A:A").End(xlDown).Row).ClearContents
     
            trouve = False
            occurence = 0
            ligne = 1
     
     
            '=======================================================
            'Recherche parmi les numéro de lots client dans adhesif
            '=======================================================
            Set R = ThisWorkbook.Sheets(PageRefRecherche).Range("A:A").Find(what:=ComboBox1.Value, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext)
            If Not R Is Nothing Then 'condition si au moins une occurrence trouvée
                trouve = True
                For Each R In ThisWorkbook.Sheets(PageRefRecherche).Range("A65536:A" & ThisWorkbook.Sheets(PageRefRecherche).Range("A:A").End(xlDown).Row)
                    If R.Text = ComboBox1.Value Then
                        With ThisWorkbook
                            occurence = occurence + 1
                            ligne = ligne + 1
     
                                .Sheets("Recherche").Range("A" & ligne).Value = .Sheets(PageRefRecherche).Range("A" & R.Row).Value
                                .Sheets("Recherche").Range("B" & ligne).Value = .Sheets(PageRefRecherche).Range("B" & R.Row).Value
                                .Sheets("Recherche").Range("C" & ligne).Value = .Sheets(PageRefRecherche).Range("C" & R.Row).Value
                                .Sheets("Recherche").Range("D" & ligne).Value = .Sheets(PageRefRecherche).Range("D" & R.Row).Value
                                .Sheets("Recherche").Range("E" & ligne).Value = .Sheets(PageRefRecherche).Range("E" & R.Row).Value
                                .Sheets("Recherche").Range("F" & ligne).Value = .Sheets(PageRefRecherche).Range("F" & R.Row).Value
                                .Sheets("Recherche").Range("G" & ligne).Value = .Sheets(PageRefRecherche).Range("G" & R.Row).Value
                                .Sheets("Recherche").Range("H" & ligne).Value = .Sheets(PageRefRecherche).Range("H" & R.Row).Value
     
     
     
     
                           End With
                    End If
                Next R
                occurence = 0
            End If
     
    end if
     
     
    End Sub
    si besoin demandez moi de plus amples informations.

    cordialement

    Pexou

  2. #2
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    28
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 28
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    As-tu essayé de mettre des points d'arrêts pour voir en débugage si tes variables prennent bien la valeur que tu souhaite?

    Je me demande si ta variable PageRefRecherche prends bien une valeur.

    J'attends ta réponse.

    cdlt

  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    C'est quoi tes ini ?

    J'avais pas vu ini

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par kev38 Voir le message
    Bonjour,

    As-tu essayé de mettre des points d'arrêts pour voir en débugage si tes variables prennent bien la valeur que tu souhaite?

    Je me demande si ta variable PageRefRecherche prends bien une valeur.

    J'attends ta réponse.

    cdlt
    bonjour,

    ma variable ne prend pas la valeur je ne comprends pas pourquoi ! pourtant le code me semble bon.

    je vous joints un fichier afin que vous compreniez.

    Cordialement

    Pexou.


    PS: EngueEngue voici ini

    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
    Private Sub Ini()
     
    Dim PageRefRecherche As String
    Dim ctrl As Control 'Variable pour la collection des controls
    Dim L As Integer    'Variable pour connaitre le numéro de derniere ligne
    Dim i As Integer    'Variable pour connaitre incrémenter les Data
    'On Vide tous les Controls
    For Each ctrl In Me.Controls
    If TypeOf ctrl Is MSForms.Label Then ctrl = ""
     
    PageRefRecherche = ChoixOuiNon
     
    Next ctrl
    Me.ComboBox1.Clear 'On vide les précédentes données
    Set WS = ThisWorkbook.Sheets(PageRefRecherche) 'On identifie l'objet pour la feuille de travail
    L = WS.Range("A65536").End(xlUp).Row    'On identifie la dernière ligne en partant du bas
    'Pour éviter les fash d'écran pour le select ci dessous
    Application.ScreenUpdating = False
        WS.Select 'On sélectionne la feuille sinon bug si elle ne l'est pas
     
     
    For i = 2 To L             'Boucle départ 2 (Ligne 2 de la feuille, jusqu'à dernière
    With Me.ComboBox1         'Avec la ComboBox1
    .AddItem WS.Range("A" & i) 'On ajoute dans la ComboBox toutes les valeurs, cellules après cellules
    End With
    Next i                     'Next pour poursuivre la boucle pour le i suivant
    Application.ScreenUpdating = True
    End Sub
    Fichiers attachés Fichiers attachés

  5. #5
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    28
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 28
    Points : 31
    Points
    31
    Par défaut
    Essayes de mettre optionBouton.Value= true

    Car je pense que ton code ne rentre jamais dans les if et de ce fait choixouinon ne prend aucune valeur.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par kev38 Voir le message
    Essayes de mettre optionBouton.Value= true

    Car je pense que ton code ne rentre jamais dans les if et de ce fait choixouinon ne prend aucune valeur.
    j'ai changer Dim PageRefRecherche as string en Option Explicit.
    Mes valeurs sont bien prises dans les variables, mais rien ne se met apres quand ma recherche se termine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Dim WS As Worksheet   'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de ce UserForm
    Dim ChoixOuiNon As String
    Dim PageRefRecherche As String
     
     
     
    Private Sub OptionButton1_Click()
    If OptionButton1.Value = True Then ChoixOuiNon = "Consommable Divers"
    Ini
    End Sub
    je n'arrive pas a voir ou sa coince

    merci de ton aide

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut TROUVE
    voici l'erreur :
    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
    Set R = ThisWorkbook.Sheets(PageRefRecherche).Range("A:A").Find(what:=ComboBox1.Value, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext)
            If Not R Is Nothing Then 'condition si au moins une occurrence trouvée
                trouve = True
                For Each R In ThisWorkbook.Sheets(PageRefRecherche).Range("A65536:A" & ThisWorkbook.Sheets(PageRefRecherche).Range("A:A").End(xlDown).Row)
                    If R.Text = ComboBox1.Value Then
                        With ThisWorkbook
                            occurence = occurence + 1
                            ligne = ligne + 1
     
                                .Sheets("Recherche").Range("A" & ligne).Value = .Sheets(PageRefRecherche).Range("A" & R.Row).Value
                                .Sheets("Recherche").Range("B" & ligne).Value = .Sheets(PageRefRecherche).Range("B" & R.Row).Value
                                .Sheets("Recherche").Range("C" & ligne).Value = .Sheets(PageRefRecherche).Range("C" & R.Row).Value
                                .Sheets("Recherche").Range("D" & ligne).Value = .Sheets(PageRefRecherche).Range("D" & R.Row).Value
                                .Sheets("Recherche").Range("E" & ligne).Value = .Sheets(PageRefRecherche).Range("E" & R.Row).Value
                                .Sheets("Recherche").Range("F" & ligne).Value = .Sheets(PageRefRecherche).Range("F" & R.Row).Value
                                .Sheets("Recherche").Range("G" & ligne).Value = .Sheets(PageRefRecherche).Range("G" & R.Row).Value
                                .Sheets("Recherche").Range("H" & ligne).Value = .Sheets(PageRefRecherche).Range("H" & R.Row).Value
     
     
     
     
                           End With
                    End If
                Next R
                occurence = 0
            End If
    il faut remplacer XlDown par XlUp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For Each R In ThisWorkbook.Sheets(PageRefRecherche).Range("A65536:A" & ThisWorkbook.Sheets(PageRefRecherche).Range("A:A").End(xlUp).Row)
    et la sa marche

    si quelqu'un a l'amabilité de m'expliquer pourquoi je suis preneur.

    Cordialement

    pexou

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Xlup : je me place en A65536 et je remonte jusqu'à la derniere non vide.
    Xldown: Je me place en A65536 et je descend jusqu'à la dernière non vide : ERREUR si A65536 est vide.

  9. #9
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    28
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 28
    Points : 31
    Points
    31
    Par défaut
    heureux que tu ais trouvé la solution désolé de ne pas avoir été très utile

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par kev38 Voir le message
    heureux que tu ais trouvé la solution désolé de ne pas avoir été très utile
    Si si ton aide m'a été utile.
    par contre j'aimerai faire un peu la même chose mais en VB.Net sous visual basic 2005 en gérant un une base access. soucis c'est qu eje ne suis pas encore assez bon en VB.Net pour me lancer seul dans l'aventure.

    si besoin je joints mon code avec un deuxieme UserForm avec lequel les données de recherche s'affiche directement dedans et non plus dans une feuille Excel.

    Cordialement

    Pexou

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    Option Explicit
    Dim WS As Worksheet   'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de ce UserForm
    Dim ChoixOuiNon As String
    Dim PageRefRecherche As String
     
     
     
    Private Sub OptionButton1_Click()
    If OptionButton1.Value = True Then ChoixOuiNon = "Consommable Divers"
    Ini
    End Sub
    Private Sub OptionButton2_Click()
    If OptionButton2.Value = True Then ChoixOuiNon = "Produit Chimique"
    Ini
    End Sub
    Private Sub OptionButton3_Click()
    If OptionButton3.Value = True Then ChoixOuiNon = "Outillage elec_pneum"
    Ini
    End Sub
    Private Sub OptionButton4_Click()
    If OptionButton4.Value = True Then ChoixOuiNon = "Outillage a main"
    Ini
    End Sub
    Private Sub OptionButton5_Click()
    If OptionButton5.Value = True Then ChoixOuiNon = "E.P.I."
    Ini
    End Sub
    Private Sub OptionButton6_Click()
    If OptionButton6.Value = True Then ChoixOuiNon = "consommable Composite"
    Ini
    End Sub
     
    Private Sub CommandButton2_Click()
    End
    End Sub
     
    Private Sub Ini()
     
     
    Dim ctrl As Control 'Variable pour la collection des controls
    Dim L As Integer    'Variable pour connaitre le numéro de derniere ligne
    Dim i As Integer    'Variable pour connaitre incrémenter les Data
    'On Vide tous les Controls
    For Each ctrl In Me.Controls
    If TypeOf ctrl Is MSForms.Label Then ctrl = ""
     
    PageRefRecherche = ChoixOuiNon
     
    Next ctrl
    Me.ComboBox1.Clear 'On vide les précédentes données
    Set WS = ThisWorkbook.Sheets(PageRefRecherche) 'On identifie l'objet pour la feuille de travail
    L = WS.Range("A65536").End(xlUp).Row    'On identifie la dernière ligne en partant du bas
    'Pour éviter les fash d'écran pour le select ci dessous
    Application.ScreenUpdating = False
        WS.Select 'On sélectionne la feuille sinon bug si elle ne l'est pas
     
     
    For i = 2 To L             'Boucle départ 2 (Ligne 2 de la feuille, jusqu'à dernière
    With Me.ComboBox1         'Avec la ComboBox1
    .AddItem WS.Range("A" & i) 'On ajoute dans la ComboBox toutes les valeurs, cellules après cellules
    End With
    Next i                     'Next pour poursuivre la boucle pour le i suivant
    Application.ScreenUpdating = True
    End Sub
     
    Private Sub CommandButton1_Click()
     
     
        Dim X, occurence As Integer
        Dim R As Range
        Dim ligne As Long
        Dim trouve As Boolean 'déclare la variable trouvé
     
     
     
        If ComboBox1.Value <> "" Then
     
            trouve = False
            occurence = 0
            ligne = 1
     
     
     
            Set R = ThisWorkbook.Sheets(PageRefRecherche).Range("A:A").Find(what:=ComboBox1.Value, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext)
            If Not R Is Nothing Then 'condition si au moins une occurrence trouvée
                trouve = True
                For Each R In ThisWorkbook.Sheets(PageRefRecherche).Range("A65536:A" & ThisWorkbook.Sheets(PageRefRecherche).Range("A:A").End(xlUp).Row)
                    If R.Text = ComboBox1.Value Then
                        With ThisWorkbook
                            occurence = occurence + 1
                            ligne = ligne + 1
     
                           UserForm2.LabelNom = .Sheets(PageRefRecherche).Range("A" & R.Row).Value
                                UserForm2.LabelRef = .Sheets(PageRefRecherche).Range("B" & R.Row).Value
                                 UserForm2.LabelFournisseur = .Sheets(PageRefRecherche).Range("C" & R.Row).Value
                                UserForm2.LabelRefAtelier = .Sheets(PageRefRecherche).Range("D" & R.Row).Value
                                UserForm2.LabelQte = .Sheets(PageRefRecherche).Range("E" & R.Row).Value
                                 UserForm2.LabelQteLot = .Sheets(PageRefRecherche).Range("F" & R.Row).Value
                                UserForm2.LabelQteRestante = .Sheets(PageRefRecherche).Range("G" & R.Row).Value
                                UserForm2.LabelLocalisation = .Sheets(PageRefRecherche).Range("H" & R.Row).Value
                          UserForm2.Show
     
                           End With
                    End If
                Next R
                occurence = 0
            End If
     
            End If
     
     
    End Sub

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

Discussions similaires

  1. [XL-2007] Correction code VBA
    Par bigokou dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 25/09/2012, 16h12
  2. Code de recherche vba
    Par akmer dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/08/2008, 13h17
  3. [VBA-E] Correction code opérations sur cellules
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/03/2007, 22h52
  4. [code] recherche multi critére
    Par batide dans le forum Access
    Réponses: 35
    Dernier message: 15/03/2006, 14h32
  5. requête suppression/correction code
    Par sarah67 dans le forum Access
    Réponses: 12
    Dernier message: 15/02/2006, 16h49

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