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 :

Trouver une cellule dans un tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2017
    Messages : 6
    Par défaut Trouver une cellule dans un tableau
    Bonjour à tous,

    Le titre peut paraître banal, mais je peine à trouver la solution au problème ci-dessous.
    Je remercie d'ores et déjà de l'attention portée à ce post.

    Exposé du problème:
    J'ai un tableau avec comme en-tête les mois (de 1 à 12) pour 3 années à la suite.
    Dans une colonne hors du tableau des années, j'ai une date.
    Le nombre de lignes est variable.
    L'objectif est de trouver la cellule dans le tableau correspondant à la date (en vba ou pas).

    Exemple du tableau:
    2017 2018 2019
    date 1 2 3 4 5 6 ... 1 2 3 4 5 6 ... 1 2 3 4 ...
    ...
    ...
    02.2018 X
    ...
    01.2019 X
    05.2017 x
    04.2017 x

    Un grand merci pour votre précieuse aide !

  2. #2
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonsoir à tous
    Bonsoir charles-andré

    Je suppose que tu cherches à trouver l'adresse du "x" en regard de la date, située en colonne "A", saisie dans une cellule.
    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
    Option Explicit
     
    Sub recherche()
    Dim ligne_trouve As Range, col_trouve As Range
    Dim recherche_ligne  As Range, recherche_col As Range
    Dim ligne As Integer, col As Integer
    Dim Var As String, mavar As String
     
    Var = "05.2017" ' la date à chercher
     
    ' on cherche la ligne de la date qui se trouve en colonne "A"
    Set recherche_ligne = ActiveSheet.Columns(1)
    Set ligne_trouve = recherche_ligne.Cells.Find(What:=Var, LookAt:=xlWhole)
    ligne = ligne_trouve.Row
     
    ' on cherche la colonne où se trouve le "x" de la ligne de la date
    mavar = "x"
    Set recherche_col = ActiveSheet.Rows(ligne)
    Set col_trouve = recherche_col.Cells.Find(What:=mavar, LookAt:=xlWhole)
    col = col_trouve.Column
     
    End Sub
    A adapter
    Dis nous
    Eric

  3. #3
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2017
    Messages : 6
    Par défaut
    Bonjour Eric,

    Merci pour la réponse et le code proposé.
    C'est l'inverse de la proposition de trouver le X.

    Je cherche à placer le X dans la bonne colonne en fonction de la date en colonne A (et non trouver la colonne où est placé le X).

  4. #4
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous
    Bonjour charles-andré

    Comme ceci peur-être :
    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
    Option Explicit
    Sub recherche_02()
    Dim ligne_trouve As Range
    Dim recherche_ligne  As Range
    Dim ligne As Integer, col As Integer
    Dim Var As String
    Dim annee As Integer
     
    Var = Range("A15") ' la date à chercher
     
    ' on cherche la ligne de la date qui se trouve en colonne "A"
    Set recherche_ligne = ActiveSheet.Columns(1)
    Set ligne_trouve = recherche_ligne.Cells.Find(What:=Var, LookAt:=xlWhole)
        ligne = ligne_trouve.Row
     
    ' on cherche la colonne pour placer le "x"
        annee = Right(Var, 4)
        col = ((annee - 2017) * 12) + Left(Var, 2) + 1
        Cells(ligne, col) = "x"
    ' à la place de ces 3 lignes on peut ecrire
        'Cells(ligne, ((Right(Var, 4) - 2017) * 12) + Left(Var, 2) + 1) = "x"
    End Sub
    A adapter
    Eric

  5. #5
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2017
    Messages : 6
    Par défaut
    Bonjour Eric,

    Merci infiniment pour la 2ème proposition !
    Je me suis basé là-dessus pour trouver le code

    Je fais donc une boucle sur la colonne A pour définir les cellules contenant une date, puis j'utilise ton 2ème morceau de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim nblignes
    nblignes = Range("a" & Rows.Count).End(xlUp).Row
    For i = 12 To nblignes
    Cells(Range("a" & i).Row, ((Right(Range("a" & i).Value, 4) - 2017) * 12) + Left(Range("a" & i).Value, 2) + 1) = "x"
    Next i
    Par contre, une petite question sur ton code :
    Si Var = range("A15"), pourquoi chercher le numéro de la ligne (par définition, A15 = ligne 15) ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    puisqu'on est dans le forum VBA, une solution VBA

    Les années sont en ligne 1, les mois en ligne 2
    Les dates sont écrites à partir de A3

    je travaille sur la feuille active

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub io()
    Dim Cell As Range
        For Each Cell In Range(Cells(3, 1), Cells(Rows.Count, 1).End(xlUp))
            Cells(Cell.Row, (Val(Split(Cell.Value, ".")(1)) - 2017) * 12 + Val(Split(Cell.Value, ".")(0)) + 1).Value = "X"
        Next Cell
    End Sub

    Maintenant, ça se fait très bien en formule Excel en utilisant la même mécanique
    Et surtout, en changeant le format des données, une simple combinaison INDEX/EQUIV ferait l'affaire

  7. #7
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous

    Ta question comportait :
    "Dans une colonne hors du tableau des années, j'ai une date." Est-ce la colonne "A" ? si oui je n'avais pas compris ta question, et prends la réponse de joe.levrai. Mais à chaque fois que tu ajouteras une date en colonne "A" ta macro "recalculera" toutes les lignes.

    Eric

  8. #8
    Invité
    Invité(e)
    Par défaut
    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
    Sub test()
    Dim Col As Object, Lng As Object, i As Long, d As String
    Set Col = CreateObject("Scripting.Dictionary")
    Set Lng = CreateObject("Scripting.Dictionary")
    With ThisWorkbook.Sheets("Feuil1").UsedRange
        For i = 0 To .Columns.Count - 1
     
           If Trim("" & .Range("A1").Offset(0, i)) <> "" Then d = Trim("" & .Range("A1").Offset(0, i))
            Col(Format(Val(Trim("" & .Range("A1").Offset(1, i))), "00") & "." & d) = i + 1
        Next
        For i = 0 To .Rows.Count - 1
     
                  Lng(Trim(.Range("A1").Offset(i).Value)) = i + 1
        Next
    End With
    '02.2018
    If Col.exists("02.2018") And Lng.exists("02.2018") Then
                    ThisWorkbook.Sheets("Feuil1").Cells(Lng("02.2018"), Col("02.2018")) = "Test X"
    End If
    End Sub
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 01/02/2017 à 15h12.

  9. #9
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2017
    Messages : 6
    Par défaut
    Je vous remercie tous pour votre précieuse aide, cela fonctionne parfaitement !

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

Discussions similaires

  1. [XL-MAC 2011] Trouver une valeur dans un tableau et afficher une cellule correspondante.
    Par mikelemerle dans le forum Excel
    Réponses: 4
    Dernier message: 11/02/2016, 20h21
  2. Bordure d'une cellule dans un tableau
    Par hammag dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/08/2009, 19h45
  3. Supprimer une cellule dans un tableau
    Par Jinx_ dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 23/08/2009, 20h44
  4. Comment trouver une valeur dans un tableau ?
    Par wizou44 dans le forum Excel
    Réponses: 20
    Dernier message: 29/08/2008, 10h57
  5. [VBA] Problème récup texte d'une cellule dans un tableau
    Par Marco le Pouillot dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 30/01/2006, 17h06

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