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 :

rechercher une donnée dans un tableau [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut rechercher une donnée dans un tableau
    Bonjour, je me tourne vers le VBA car dans les fonctions Excel , je n'ai pas trouvé mon bonheur…je bosse sur excel 2000

    Voilà,
    J'ai une feuille de garde à remplir en fonction d'un planning

    Imaginez un tableau horizontal mensuel dans lequel j'ai tous les jours du mois en entete de colonne, et chaque jour est divisé en 2 pour avoir la différence jour/nuit. (au besoin, cette précision "jour/nuit" peut etre: soit intégrée à la ligne des jours, soit séparée dans la ligne en dessous, ce n'est pas encore figé)

    La colonne A contient la liste des agents

    Par exemple, J'ai besoin d'afficher dans une cellule précise de ma feuille de garde, le nom de l'agent qui est de garde le 2/01/2010 en journée.
    Avec rechercheV et rechercheH, je n'ai pas réussi à récupérer les paramètres dont j'ai besoin pour affiner la recherche jour/nuit

    Comment dois je aborder le problème en VBA….

    Merci à tous.

    P.S j'avais deja commencé mon post hier, mais la mise en page de mon tableau d'exemple n'a pas fonctionné, donc j'ai réecrit mon messsage.

  2. #2
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    bon, j'ai commencé à gratouiller pour récuperer le n° de colonne à tester en fonction de la date de la feuille de garde.

    pour résumer j'isole le jour du mois avec la fonction Day

    La date de la feuille de garde est située en A1, (j'ai nommé cette cellule "Date_planning")
    ma fonction est donc:

    Day(Date_planning)

    mais j'ai toujour "30" comme résultat alors que pour mon exemple j'ai essayé plusieur formats de cellule avec plusieurs dates rien n'y fait ...Quelqu'un à une idée ??

  3. #3
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    Je progresse un chouillat
    Ce code me permet en fonction de 2 parametres, de connaitre dans quel numéro de colonne je doit chercher.

    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
     
    Function trouve_n°_colonne()
    Dim n°colonne As Integer
    Dim periode As String
     
    ' En attendant de pouvoir utiliser la fonction VBA: Day()
    ' c'est la valeur de "E7" qui est traduite avec la fonction Excel: Jour()
     
    'Récupération de la periode Saisie en J6
    periode = Worksheets("Feuille_garde").Range("J6").Value
     
    'Détermination du n° de colonne en fonction de la date et de la periode
    If periode = "Jour" Or periode = "Jour Nuit" Then
        n°colonne = (Range("e7").Value) * 2
        MsgBox "le n° est : " & n°colonne
    ElseIf periode = "Nuit" Then
        n°colonne = ((Range("e7").Value) * 2) + 1
        MsgBox "le n° est : " & n°colonne
    Else
        MsgBox "Le type de periode n'est pas valide "
    End If
     
    End Function
    Il doit y avoir plus simple mais bon....

    Maintenant j'ai encore 2 problemes:
    1) j'ai différentes listes d'agents les PATS, les SPP, et les les CdS
    je dois definir un nombre variable d'agent dans chaque type d'agent. (ex si demain j'ai 2 embauches, mon nombre de PATS sera plus grand de 2 éléments). Il faut que j'arrive à definir le nombre de lignes qui compose ma liste de PATS, de SPP et de CdS.

    d'ou ma premiere question: y a t'il un moyen simple de definir un nombre de ligne à partir d'une cellule située dans la colonne A???

    2) je cherche l'équivalent VBA de la fonction "Equiv" car, quand j'aurais trouvé le nombre de ligne qui compose ma zone de recherche (voir ma question 1), je pourais trouver le nom de l'agent x(situé dans la liste des PATS) qui est coché "x" le 12/15/2010 en periode nuit....

    j'ai trouvé c'est Match()

    ouala....ça avance mais c'est chaud....

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    bonsoir

    Pour Day() c'est la syntax qui n'était pas bonne avec une cellule nommé

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    1) j'ai différentes listes d'agents les PATS, les SPP, et les les CdS
    je dois definir un nombre variable d'agent dans chaque type d'agent. (ex si demain j'ai 2 embauches, mon nombre de PATS sera plus grand de 2 éléments). Il faut que j'arrive à definir le nombre de lignes qui compose ma liste de PATS, de SPP et de CdS.
    Ca dépend de 2 choses comment sont rangés tes données et comment définir quel agent fait parti de quelle liste

    d'ou ma premiere question: y a t'il un moyen simple de definir un nombre de ligne à partir d'une cellule située dans la colonne A???
    si les 10 premiere cellule dans la colonne A ont des valeurs cette ligne renverra $A$1:$A$10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox range("A1:A" &  range("A1").End(xlDown).row).Address
    pour le point 2 il y aurait plutot la solution d'utiliser Find

  6. #6
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    Salut et merci pour tes réponses.

    En fait le planning est constitué de la maniere suivante:
    en colonne "A", j'ai un premier listing avec tout les PATS, j'ai, une ligne vide et ensuite le listing des SPP, une ligne vide, et le listing des Chef de salle.
    Ces listings sont fixes et triés par ordre alphabétique mais...si j'insere un nouvel agent SPP, le taille de mon listing SPP va augmenter d'une ligne ..normal!!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox range("A1:A" &  range("A1").End(xlDown).row).Address
    je vais essayer ça...

    et pour la solution "FIND", je viens de me rendre compte que cela serait plus éfficace que "EQUIV". "FIND" s'apparente à la fonction excel "Recherche" avec les vecteurs et correspond mieux à mes attentes...

    en tout cas merci...

  7. #7
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    c'est pas encore gagné,
    voila ou j'en suis,

    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
    Function trouve_n°_colonne()
    Dim n°colonne As Integer
    Dim periode As String
     
    'Récupération de la periode saisie en J6
    periode = Worksheets("Feuille_garde").Range("J6").Value
     
    'Détermination du n° de colonne en fonction de la date et de la periode
    'ici je test pour savoir si j'ai une periode "jour" ou "jour nuit"
    If periode = "Jour" Or periode = "Jour Nuit" Then
     
        'récupération du n° de colonne, (ça marche super bien)
        n°colonne = Day([Date_planning]) * 2 
     
        'c'est ici que ça se corse, dans la cellule C15 de ma "Feuille de garde",
        'je veux chercher dans la plage (B63:B69) la lettre "j" et recuperer
        'le nom de l'agent situé dans A63:A69 (comme avec la fonction
        'recherche "vecteur"
        Range("C15") = Find("j", Worksheets("Planning").Range("b63:b69"), Worksheets("Planning").Range("A63:A69"))
     
        MsgBox "le n° est : " & n°colonne
    ElseIf periode = "Nuit" Then
        n°colonne = Day([Date_planning]) * 2 + 1
        MsgBox "le n° est : " & n°colonne
    Else
        MsgBox "Le type de periode n'est pas valide "
    End If
     
    End Function

    Sauf que la j'ai ça....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub, Function ou Property non définie (erreur 35)
    Il boque sur "FIND" et je vois pas pourquoin, j'ai essayé avec lookup...idem

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonsoir

    regarde ce bout de code pour la syntaxe d'écriture de Find, je l'ai fait correspondre à ton attente pour que tu puisse t'y retrouver.

    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 plage As Range, C As Range
     
    With Worksheets("Planning")
      'Définir la plage dans laquelle chercher
      Set plage = Worksheets("Planning").Range("B63:B69")
      'lance la recherche (F1 sur Find pour l'aide)
      Set C = plage.Find("j", LookIn:=xlValues, lookat:=xlWhole)
      's'il y a une réponse
      If Not C Is Nothing Then
        Worksheets("Feuille_garde").Range("c15") = .Range(C.Address).Offset(0, -1).Value
      Else
        MsgBox "la recherche est infructueuse"
      End If
    End With
     
    Set plage = Nothing: Set C = Nothing

  9. #9
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    Ok merci pour ta réponse..
    je galere un peu avec look in et look at mais je vais trouver...

    je vais modifier le code pour
    1) parametrer la "plage de recherche " en fonction d'une date ecrite sur la feuille de garde

    2) parametrer l'offset en fonction de la colonne ou je fais le "find"

    encore mercie , je te tiens au courant...

    @++

    P.S c'est bon j'ai trouvé à quoi servaient Lookin et Lookat

  10. #10
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    Sans vouloir abuser, j'ai un probleme

    tu initialise la zone "plage" sur la feuille "planning" entre B63 et B69.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Worksheets("Planning").Range("B63:B69")
    ok dans mon premier code je definissait le n° d'un colonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim n°colonne As Integer
    je veux remplacer B par n°colonne
    je devrais donc avoir un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .....Range(n°colonne &"63" : n°colonne & "69")
    sauf que ça marche pas (message d'erreur:"Attendu séparateur de liste ou)" )et je ne sais plus comment remplacer le n° du colonne part une variable...pourtant je suis quasi certain que c'est un truc de ce genre...
    au 'scour

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    un " était mal placé et il manquait un &

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range (n°colonne & "63:" & n°colonne & "69")

  12. #12
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    merci...j'essaye de fusionner les 2 codes...c'est à se flinguer....

    la position des Set....est elle importante?

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    le "set C" utilisant la variable Plage le "Set Plage" doit être réaliser avant si c'est ta question

    il faut faire attention à qui utilise quoi et à quel moment

    j'espère avoir été clair dans mon explication sinon explique le pourquoi de la question.

  14. #14
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    Salut...c'est encore moi...
    en fait les deux morceaux de codes fonctionnent super bien ....séparément
    -le premier me permet de focaliser ma recherche sur une journée et une periode précise en fonction de 2 criteres.
    -le deuxieme me permet de recuperer une valeur dans la colonne A (liste des agents) en fonction d'une valeur située dans une colonne B "constante" par exemple (j'utilise le terme "constante" car elle est "fixe" dans le code)


    Pour "regrouper" les deux codes en un seul, je dois forcement inserer les lignes du deuxieme dans le premier....logique, mais apres j'ai peur que les déclarations ne respectent plus les priorités de déclarations (si il y en a ...), le set....me pose probleme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Nothing: Set C = Nothing
    hors toi, tu l'a mis à la fin de ton code...

    Voici un début de fusion de code

    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
    Function Recap()
    Dim n°colonne As Integer
    Dim periode As String
    Dim plage As Range, C As Range
     
    'Récupération de la periode Saisie en J6
    periode = Worksheets("Feuille_garde").Range("J6").Value
     
     
    'Détermination du n° de colonne en fonction de la date et de la periode
    If periode = "Jour" Or periode = "Jour Nuit" Then
        n°colonne = Day([Date_planning]) * 2
     
        'initialisation de la plage de recherche en fonction de "n°colonne"
        Set plage = Worksheets("Planning").Range(n°colonne & "63 : " & n°colonne & " 69") 'ça c'est correct
     
    ElseIf periode = "Nuit" Then
        n°colonne = Day([Date_planning]) * 2 + 1
     
        MsgBox "le n° est : " & n°colonne
    Else
        MsgBox "Le type de periode n'est pas valide "
    End If
     
     
    End Function
    bon c'est pas fini mais je me retrouve avec un "erreur d'execution definie par l'aplication ou par l'objet"

    j'ai lancé l'éxécution en mode pas a pas , et ça plante sur cette ligne la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Worksheets("Planning").Range(n°colonne & "63 : " & n°colonne & " 69")
    elle me parait correcte mais bon...

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    Pour "regrouper" les deux codes en un seul, je dois forcement inserer les lignes du deuxieme dans le premier....logique, mais apres j'ai peur que les déclarations ne respectent plus les priorités de déclarations (si il y en a ...), le set....me pose probleme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Nothing: Set C = Nothing
    Cette ligne est à mettre à la fin avant le end Function car elle sert à vider les variables pour finir proprement.

    pour cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Worksheets("Planning").Range(n°colonne & "63 : " & n°colonne & " 69")
    il faut réfléchir à la chaine de caractère retourné pour la partie
    n°colonne & "63 : " & n°colonne & " 69"

    si n°colonne est egal à 5 par exemple ça donnera
    5 & "63 : " & 5 & " 69" -> 563:569 d'ou l'erreur

    dans ce cas il faut utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Worksheets("Planning").Range(Cells(63, n°colonne), Cells(69, n°colonne))

  16. #16
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    oulaaaa
    je me mélange les bouts de code, je croyais que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(n°colonne & "63 : " & n°colonne & " 69")
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(63, n°colonne), Cells(69, n°colonne))
    s'etait 2 syntaxes différentes pour dire la même chose...

    bon je te remercie...
    je continue

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Avec ta variable en integer ce serait vrai pour une ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Numligne as Integer
     
    Range ("A" & Numligne & "F:" & Numligne)
    'correspond à
    Range(Cells(Numligne, 1), Cells(Numligne, 6))
    mais pour une colonne il te faudrai une variable en string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim colonne As String
     
    Debug.Print Range(colonne & "63:" & colonne & "69").Address
    'correspond à
    Debug.Print Range(Cells(63, colonne), Cells(69, colonne)).Address

  18. #18
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    bon, je suis désolé, je comprends plus rien
    tel quel, ce code fonctionne tres bien...c'est la fusion des 2 codes précedents...
    ->le range correspondant à ma colonne de recherche pour "J" est constant...
    ->le n°col est un integer

    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
    Sub test1()
     
    Dim n°col As Integer
    Dim zone_recherche As Range
    Dim cellule_J As Range
     
     
    periode = Worksheets("Feuille_garde").Range("G6").Value
     
    If periode = "Jour" Or periode = "Jour Nuit" Then
        n°col = Day([Date_planning]) * 2
        MsgBox "le n° est : " & n°col
    ElseIf periode = "Nuit" Then
        n°col = Day([Date_planning]) * 2 + 1
        MsgBox "le n° est : " & n°col
    Else
        MsgBox "Le type de periode n'est pas valide "
    End If
     
    With Worksheets("Planning")
     
      Set zone_recherche = Worksheets("Planning").Range("H3:H9")
      'Set zone_recherche = Worksheets("Planning").Range(Cells(63, n°colonne), Cells(69, n°colonne))
      ' c'est ici que ça plante
     
     
      Set cellule_J = zone_recherche.Find("J", LookIn:=xlValues, lookat:=xlWhole)
     
     
     
      If Not cellule_J Is Nothing Then
     
        Worksheets("Feuille_garde").Range("c8") = .Range(cellule_J.Address).Offset(0, -7).Value
     
      Else
     
        MsgBox "la recherche est infructueuse"
      End If
    End With
     
    Set zone_recherche = Nothing: Set cellule_J = Nothing
     
    End Sub
    je n'arrive pas à remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set zone_recherche = Worksheets("Planning").Range("H3:H9")
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Set zone_recherche = Worksheets("Planning").Range(Cells(63, n°col), Cells(69, n°col))
    j'ai pourtant rajouté
    ce n'est peut etre pas la bonne variable

    ton exemple avec debug... me donne "erreur 13 incompatibilité de type
    je ne suis pas certain d'avoir compris "Range(Cells(63, n°col), Cells(69, n°col))
    attend un string à la place de n°col???

    comment je vai spouvoir relier les 2???
    c'est la misere....
    merci

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    J'ai effectivement l'impression que tu commence à tous mélanger donc j'ai repris ton code et je l'ai modifier

    essaye
    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
    Sub test1()
     
    Dim n°col As Integer
    Dim zone_recherche As Range
    Dim cellule_J As Range
     
     
    periode = Worksheets("Feuille_garde").Range("G6").Value
     
    If periode = "Jour" Or periode = "Jour Nuit" Then
        n°col = Day([Date_planning]) * 2
        MsgBox "le n° est : " & n°col
    ElseIf periode = "Nuit" Then
        n°col = Day([Date_planning]) * 2 + 1
        MsgBox "le n° est : " & n°col
    Else
        MsgBox "Le type de periode n'est pas valide "
    End If
     
    With Worksheets("Planning")
     
      'Set zone_recherche = .Range("H3:H9")
      Set zone_recherche = .Range(Cells(63, n°col), Cells(69, n°col))
     
      Set cellule_J = zone_recherche.Find("J", LookIn:=xlValues, lookat:=xlWhole)
     
      If Not cellule_J Is Nothing Then
     
        Worksheets("Feuille_garde").Range("c8") = .Range(cellule_J.Address).Offset(0, -7).Value
     
      Else
     
        MsgBox "la recherche est infructueuse"
      End If
    End With
    question tu veux cherché entre les ligne 3 et 9 ou entre 63 et 69 car les valeurs ont changés dans le dernier code ? dans le code ci dessus c'est entre 63 et 69

  20. #20
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    Merci encore pour ton aide...

    en fait comme mon tableau et grand et que je mélange les lignes,
    j'ai tout simplifier pour y voir plus claire....donc ma nouvelle zone de recherche correspond à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set zone_recherche = .Range(Cells(3, n°col), Cells(9, n°col))
    et quand j'execute le code j'ai bien ma msgbox qui m'indique le bon n° de colonne mais j'ai aussi:

    Erreur d'execution 1004
    Erreur définie par l'application ou par l'objet

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2013] Rechercher une donnée dans un tableau
    Par guits56 dans le forum Excel
    Réponses: 2
    Dernier message: 31/07/2014, 08h36
  2. Réponses: 1
    Dernier message: 01/03/2008, 12h01
  3. Réponses: 10
    Dernier message: 05/01/2008, 11h59
  4. Réponses: 1
    Dernier message: 08/09/2007, 19h00
  5. Rechercher une valeur dans un tableau
    Par pafi76 dans le forum Access
    Réponses: 2
    Dernier message: 29/06/2006, 14h23

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