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 :

VBA Tableau à partir d'une plage Excel [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de Rémy.A
    Homme Profil pro
    Expert SEE ELECTRICAL EXPERT
    Inscrit en
    Juin 2017
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert SEE ELECTRICAL EXPERT
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 117
    Points : 91
    Points
    91
    Par défaut VBA Tableau à partir d'une plage Excel
    Bonjour à tous!

    Je viens vers vous car je suis bloqué...

    A partir de deux plage Excel je créer 2 tableaux, je rempli mes tableaux, tout vas bien^^
    Le problème c'est que je ne sais pas les utiliser.

    Mon 1er tableau :

    Tab_ref il correspond à la cellule D1 à SJ1 (500 colonnes). Dans ces cellule sont écrit des valeur qui me servent de référence, exemple 9001 en cellule G1

    Mon 2eme tableau

    Tab_valeur il correspond à la cellule D7 à SJ... Dans ce tableau sont stocké des données.

    Les deux tableaux ont le même nombre de colonnes.


    Est_il possible de faire, par exemple, la recherche de la valeur 9001 dans le tableau Tab_ref et de stocker le numéro de colonne du tableau Tab_ref où est rangé 9001?

    Dans Excel je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    'cherche la colonne "N° du plan" dans la configuration PLC
    Rows("1:1").Select
    Selection.Find(What:="9001", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
    index_col = ActiveCell.Column
    Est_il possible de faire la même chose avec mon tableau Tab_ref?

    voici le VBA que j'ai commencé a écrire
    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
     
    Sub Tableaux_Virtuel()
    'Macro qui permet de mettre PLCconfiguration dans un tableau virtuel
     
     
    Dim Tab_ref As Variant
    Dim tab_valeur As Variant
     
    Dim row_fin As Integer
    Dim col_fin As Integer
    Dim l As Integer
    Dim k As Integer
     
     
    '####créer un classeur temporaire en copiant la configuration PLC
     
    Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
    Workbooks.Add 'Créer un classeur Excel
    temp = ActiveWorkbook.Name 'Nomme le nouveau classeur "temp"
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
    Cells.Replace What:="0.1", Replacement:="'0.10", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
    Cells.Replace What:="0.2", Replacement:="'0.20", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
    Cells.Replace What:="0.3", Replacement:="'0.30", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
    Cells.Replace What:="0.4", Replacement:="'0.40", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
    Cells.Replace What:="0.5", Replacement:="'0.50", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
    Cells.Replace What:="0.6", Replacement:="'0.60", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
     
     
    'Détemine la dernière ligne pleine
    row_fin = Cells(Cells.Columns.Count, 4).End(xlUp).Row
    'Détemine la dernière colonne pleine
    col_fin = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
     
    ''Créer un tableau 2 dimentions.
    'ReDim TabPLC(row_fin, col_fin)
     
    Tab_ref = Range(Cells(1, 4), Cells(1, col_fin))
     
    tab_valeur = Range(Cells(8, 4), Cells(row_fin, col_fin))
     
    'ferme le classeur temporaire sans les sauver
    Workbooks(temp).Close SaveChanges:=False
    'vide le presse-papier
    Application.CutCopyMode = False
     
    End Sub
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Pour trouver le N° de la colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ValCherchee = "9001"
        Set NumCol = Rows(1).Find(What:=ValCherchee, LookIn:=xlValues, LookAt:=xlWhole)
        index_col = NumCol.Column

    Est_il possible de faire, par exemple, la recherche de la valeur 9001 dans le tableau Tab_ref et de stocker le numéro de colonne du tableau Tab_ref où est rangé 9001?
    OUI, mais le stocker où?

    Cdlt

  3. #3
    Membre régulier Avatar de Rémy.A
    Homme Profil pro
    Expert SEE ELECTRICAL EXPERT
    Inscrit en
    Juin 2017
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert SEE ELECTRICAL EXPERT
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 117
    Points : 91
    Points
    91
    Par défaut [XL-2019] VBA Tableau à partir d'une plage Excel
    Bonjour ARTURO83,

    Merci pour la réponse.

    Le Tableau Tab_ref est un tableau de type array as variant en 2 dimensions. C'est dans ce tableau vba que je voudrais récupérer le numéro de colonne et non dans Excel.

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    D'après vos tableaux
    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
        Tab_ref = Range(Cells(1, 4), Cells(1, col_fin))
        tab_valeur = Range(Cells(8, 4), Cells(row_fin, col_fin))
     
        'Repérage dans Tab_ref
        NumCol = 1
        For Each Cell In Tab_ref
            If Cell = "9001" Then
                Col = NumCol
                Exit For
            End If
            NumCol = NumCol + 1
        Next
     
        'Repérage dans tab_valeur
        NumCol = 1
        NumLig = 1
        For Each Cell In tab_valeur
            If Cell = "9001" Then
                Col = NumCol
                Exit For
            End If
            If NumLig = row_fin - 7 Then
                NumLig = 1
                NumCol = NumCol + 1
            Else
                NumLig = NumLig + 1
            End If
        Next

    A tester

    Cdlt

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une autre méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    i = 0
    j = 0
    For i = 1 To UBound(Tab_Ref, 1) 'Boucle sur les lignes
        For j = 1 To uboud(Tab_Ref, 2) 'Boucle sur les colonnes
            If Tab_Ref(i, j) = "9001" Then
                Col = j
                Ligne = i
                Exit For
            End If
    Cordialement,
    C

  6. #6
    Invité
    Invité(e)
    Par défaut
    Désolée, il y a une petite faute de frappe: roll:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    i = 0
    j = 0
    For i = 1 To UBound(Tab_Ref, 1) 'Boucle sur les lignes
        For j = 1 To UBound(Tab_Ref, 2) 'Boucle sur les colonnes
            If Tab_Ref(i, j) = "9001" Then
                Col = j
                Ligne = i
                Exit For 'Si tu veux sortir dès la première occurence trouvée
            End If

  7. #7
    Membre régulier Avatar de Rémy.A
    Homme Profil pro
    Expert SEE ELECTRICAL EXPERT
    Inscrit en
    Juin 2017
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert SEE ELECTRICAL EXPERT
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 117
    Points : 91
    Points
    91
    Par défaut VBA Tableau à partir d'une plage Excel
    Bonjour à tous,

    Merci pour vos réponses et l'aide apportée!!

    Merci Clochete, ta solution fonctionne parfaitement!!

    Bonne journée

    Rémy.

  8. #8
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Autre méthode encore plus rapide sans passer par des boucles
    pour Tab_ref:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Set Tab_ref = Range(Cells(1, 4), Cells(1, col_fin))
        Set x = Tab_ref.Find("9001", LookIn:=xlValues, lookat:=xlWhole)
        If Not x Is Nothing Then
            Col = x.Column
            Lig = x.Row
        End If
    Pour tab_valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Set tab_valeur = Range(Cells(8, 4), Cells(row_fin, col_fin))
        Set x = tab_valeur.Find("9001", LookIn:=xlValues, lookat:=xlWhole)
        If Not x Is Nothing Then
            Col = x.Column
            Lig = x.Row
        End If
    Cdlt

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    sans boucle aussi mais sur tes variable tableaux avec match
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
        Tab_ref = Range(Cells(1, 4), Cells(1, "sj"))
        tab_valeur = Range(Cells(8, 4), Cells(8, "sj"))
        If Not IsError(WorksheetFunction.Match(9001, Tab_ref, 0)) Then
            MsgBox tab_valeur(1, WorksheetFunction.Match(9001, Tab_ref, 0))
        End If
    End Sub

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

Discussions similaires

  1. [XL-2010] [VBA ARRAY]Recherche dans un tableau par rapport à une plage
    Par Hugo_pack dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/07/2014, 18h00
  2. [XL-2003] Creer tableau à partir d'une comboBox VBA
    Par hazein dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/09/2012, 11h48
  3. Remplir un tableau à partir d'une plage
    Par npopravka dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/03/2012, 13h09
  4. [PPT-2003] Génération d'un tableau de bord à partir d'une table excel
    Par Dborj dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 18/03/2010, 15h09
  5. [VBA-Excel] Créer un événement à partir d'une cellule excel
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/01/2007, 11h36

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