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 :

propriété variable pour RANGE et cellule.Offset qui ne fonctionnent pas


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable Logistique et Export
    Inscrit en
    Octobre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable Logistique et Export
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2017
    Messages : 14
    Par défaut propriété variable pour RANGE et cellule.Offset qui ne fonctionnent pas
    Bonjour,

    svp je cherche d'automatisé la recherche de colonne ( sans définr nom colonne pour eviter risque changement ordre colonne en source données)

    je suis en bonne étape, sauf qu'à l'apelle , Range et Cell.offset n'accepte pas les variables

    impossible de changer "A1:A" en Range et 1 en Cell.offset

    Set plageRecherche = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)

    resultat = resultat & cellule.Offset(0, 1).Value & vbCrLf

    Ci-Joint le Source
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Heu, pas compris.

    Peux-tu être plus explicite ?

  3. #3
    Membre averti
    Homme Profil pro
    Responsable Logistique et Export
    Inscrit en
    Octobre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable Logistique et Export
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2017
    Messages : 14
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Heu, pas compris.

    Peux-tu être plus explicite ?
    tt de suite,

    en effet, je vise éviter le risque de changement d'ordre des colonne après un certain temp d'utilisation , ce que nuit au chargement des données correctes

    donc j'ai voulu développer code VBA qui permet de chercher la ligne demandé par son nom (1er cellule en fait) , une fois trouver je continue à parcourir et extacter les données selon d'autres conditions

    dans le cas de la pièce jointe, je veux chercher la colonne nommé "continent" et charger le textbox "TextBox1" par toutes les équivalents trouvées en colonne nommé "pays" , indépendamment des positions des colonnes


    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
    Dim valeurRecherche As String
    Dim plageRecherche As Range
    Dim cellule As Range
    Dim resultat As String
    Dim ws As Worksheet
    Dim regCol As Range
    Dim regCo2 As Range
    Dim regColName1 As String
    Dim regColName2 As String
    Dim regColPosition As Long
     
     
         ''''******((((( Chercher Position de colonne auomatiquement , sans définr nom colonne pour eviter risque changement ordre colonne en source données))))******
     
        ' Spécifiez le nom de la colonne à parcourir
        regColName1 = "pays"
     
        ' Spécifiez le nom de la colonne d'extraction des données
        regColName2 = "continent"
     
        ' Spécifiez la feuille de calcul dans laquelle vous souhaitez rechercher la colonne
        Set ws = ThisWorkbook.Worksheets("Feuil1")
     
     
     
        ' Recherchez la colonne nommée "pays" dans la feuille de calcul spécifiée
        Set regCol = ws.Rows(1).Find(regColName1, LookIn:=xlValues, LookAt:=xlWhole)
     
        ' Récupérez la position de la colonne
        regColPosition = regCol.Column
     
     
     
     
        ' Recherchez la colonne nommée "pays" dans la feuille de calcul spécifiée
        Set regCol2 = ws.Rows(1).Find(regColName2, LookIn:=xlValues, LookAt:=xlWhole)
     
        ' Récupérez la position de la colonne
        regColPosition2 = regCol2.Column
     
     
        ' Affichez la position de la colonne dans la fenêtre de l'éditeur VBA
        MsgBox "La colonne nommée (((" & regColName & "))) se trouve à la position " & regColPosition & " dans la feuille de calcul '" & ws.Name & "'."
        _______________________________________________________________________________________________
     
     
        ' Spécifiez la valeur à rechercher
        valeurRecherche = "Afrique"
     
        ' Spécifiez la plage de recherche (colonne A)
        Set plageRecherche = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
     
        ' Réinitialise le résultat
        resultat = ""
     
        ' Parcourt chaque cellule de la plage de recherche
        For Each cellule In plageRecherche
            ' Vérifie si la valeur recherchée correspond à la valeur de la cellule
            If cellule.Value = valeurRecherche Then
                ' Ajoute la valeur équivalente (colonne pays) au résultat
                resultat = resultat & cellule.Offset(0, 1).Value & vbCrLf
            End If
        Next cellule
     
        ' Affiche le résultat dans une zone de texte
        TextBox1.Text = resultat
    à la logique des chose, j'aurais la possibilité de changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ' Spécifiez la plage de recherche (colonne A)
        Set plageRecherche = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ' Spécifiez la plage de recherche (colonne A)
        Set plageRecherche = Range(regColPosition  & Cells(Rows.Count, 1).End(xlUp).Row)
    et j'aurais aussi la possibilité de changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat = resultat & cellule.Offset(0, 1).Value & vbCrLf
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat = resultat & cellule.Offset(0, regColPosition2).Value & vbCrLf

    j'espère que j'ai pu clarifier le besoin

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Franchement,
    Ne te fais pas chier à chercher des noms de colonne dans une plage quelconque, et passe par des tableau structuré.
    Ces derniers embarquent plein d'infos utiles, leur taille, les colonnes avec leur nom, les lignes ect ect ...
    et tu n'auras pas à te soucier de la position des colonnes.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Ws As Excel.Worksheet
    Set Ws = thisWorkbook.Worksheets("Feuil1")
     
    Dim Lo As Excel.ListObject
    Set Lo = Ws.ListObjects(1)    '// reference sur le 1er tableau structuré de la feuille
     
    Dim Lc As Excel.ListColumn
    Set Lc = Lo.ListColumns("pays")    '// Referece sur la colonne "pays"
     
    MsgBox "Adresse de la colonne pays: " & Lc.Range.Address
    MsgBox "Adresse des données de la colonne pays: " & Lc.DataBodyRange.Address

  5. #5
    Membre averti
    Homme Profil pro
    Responsable Logistique et Export
    Inscrit en
    Octobre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable Logistique et Export
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2017
    Messages : 14
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Franchement,
    Ne te fais pas chier à chercher des noms de colonne dans une plage quelconque, et passe par des tableau structuré.
    Ces derniers embarquent plein d'infos utiles, leur taille, les colonnes avec leur nom, les lignes ect ect ...
    et tu n'auras pas à te soucier de la position des colonnes.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Ws As Excel.Worksheet
    Set Ws = thisWorkbook.Worksheets("Feuil1")
     
    Dim Lo As Excel.ListObject
    Set Lo = Ws.ListObjects(1)    '// reference sur le 1er tableau structuré de la feuille
     
    Dim Lc As Excel.ListColumn
    Set Lc = Lo.ListColumns("pays")    '// Referece sur la colonne "pays"
     
    MsgBox "Adresse de la colonne pays: " & Lc.Range.Address
    MsgBox "Adresse des données de la colonne pays: " & Lc.DataBodyRange.Address
    oh la la !!!
    je savais pas que ça existait une solution pareil, ça m'aurais sauvait énormement de temp

    c magique pour moi en terme de nombre de ligne de code, complexité d'execution du programme et tt

    t'es mon sauveur cher deedolith !

    grosse merci pour toi

    j'essayerais la solution et je te remet la situation, je commence par chercher quoi tableau structuré

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    On n'est pas obligé non plus de préciser la feuille pour référencer un ListObject présent dans le classeur actif

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub t()
      Dim t As ListObject
      Set t = Range("t_Facturier").ListObject
      Debug.Print t.Range.Address(External:=True)
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [XL-2007] Code pour selection de cellules qui ne fonctionne pas avec la fonction "Locked"
    Par coco.on.off dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/07/2014, 18h01
  2. Range.Offset(1) dans une boucle qui ne fonctionne pas
    Par Pierre.g dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/08/2008, 11h58
  3. [MySQL] include pour connexion à la base qui ne fonctionne pas
    Par TOSCAN dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/04/2008, 11h57
  4. Réponses: 2
    Dernier message: 04/10/2007, 16h05
  5. [VBA-E] Variable qui ne fonctionne pas systématiquement
    Par spileo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/02/2007, 08h50

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