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 :

Set range probleme / optimisation


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 163
    Par défaut Set range probleme / optimisation
    Bonjour à toutes et tous,

    j'ai établi le code suivant destiné à identifier la plage de recherche mais je ne suis pas vraiment sur de mettre cela en place correctement car de plus cela ne fonctionne pas in fine
    j'ai un id-projet (integer) dans la colonne A et j'identifie d'abord les lignes correspondantes à mon futur range.
    pour information les variables debut et fin me renvoi les bonnes indications même si mon code est loin d'etre optimal je le concède

    mais dans tous les cas le set rng lui ne fonctionne pas correctement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rng = f.Range("A" & debut & ":" & "A" & fin
    une petite aide / optimisation serait la bienvenue.

    merci à vous par avance

    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
     
    Private Sub UserForm_Activate()
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As String, AdresseTrouvee As String
     
    Id_Project = Sheets("DashBoard").Range("A1")
     
    Set f = Sheets("Work-Packages")
     
    Valeur_Cherchee = Id_Project
     
    Set PlageDeRecherche = f.Columns(1)
     
    Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
     
    AdresseTrouvee = Replace(Trouve.Address, "$", "")
    AdresseTrouvee = Replace(AdresseTrouvee, "A", "")
     
    'vidage des variables
    Set PlageDeRecherche = Nothing
    Set Trouve = Nothing
     
    debut = CInt(AdresseTrouvee)
    Nb_WP = Application.WorksheetFunction.CountIf(f.Range("A:A"), Id_Project)
     
    fin = debut + Nb_WP
     
     
    Set Rng = f.Range("A" & debut & ":" & "A" & fin)

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Darkangel2014 Voir le message
    j'ai établi le code suivant destiné à identifier la plage de recherche mais je ne suis pas vraiment sur de mettre cela en place correctement car de plus cela ne fonctionne pas in fine
    Syntaxiquement, cette ligne de code est correcte (je suppose que la parenthèse fermante qui manque est juste une erreur de copier/coller).

    Dans, sans plus d'information sur ce que tu souhaites obtenir comme plage et ce que tu obtiens, difficile de dire ce qui ne va pas.

    Petit détail : tu devrais déclarer TOUTES tes variables.

    Ta façon d'obtenir "debut" et "fin" est un peu compliquée.
    A ta place, j'aurais écrit :
    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
    Private Sub UserForm_Activate()
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim debut As Long, fin As Long
    Dim f As Worksheet
     
    Id_Project = Sheets("DashBoard").Range("A1")
     
    Set f = Sheets("Work-Packages")
     
    Valeur_Cherchee = Id_Project
     
    Set PlageDeRecherche = f.Columns(1)
     
    Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
     
    If Not Trouve Is Nothing Then
        debut = Trouve.Row
        Nb_WP = Application.WorksheetFunction.CountIf(f.Range("A:A"), Id_Project)
        fin = debut + Nb_WP
     
        Set Rng = f.Range("A" & debut & ":" & "A" & fin)
    End If

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 163
    Par défaut
    merci pour ce correctif mais cela ne fonctionne pas pour autant

    j'ai besoin de définir la plage en vue de pouvoir utiliser le code d'affichage dans une listbox en colonne.
    Cela fonctionne bien si je défini rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rng = f.Range("A2:M" & f.[A65000].End(xlUp).Row)
    mais ici mon objectif est définir une liste stricte correspondant aux lignes du projet que j'ai avec l'id projet
    les valeurs de début et fin sont correctes mais cela ne fonctionne pas..

    et pourtant quand je teste Set Rng = f.Range("A" & debut & ":" & "A" & fin) en msgbox cela me renvoi les bonnes lignes

    une explication à me founir svp?

    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
    Dim Id_Project As Integer
    Dim ColVisu(), LargeurCol(), Rng
     
    Private Sub UserForm_Activate()
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As String, AdresseTrouvee As String
    Dim debut As Long, fin As Long
    Dim f As Worksheet
     
    Id_Project = Sheets("DashBoard").Range("A1")
     
    Set f = Sheets("Work-Packages")
     
    Valeur_Cherchee = Id_Project
     
    Set PlageDeRecherche = f.Columns(1)
     
    Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
     
    If Not Trouve Is Nothing Then
        debut = Trouve.Row
        Nb_WP = Application.WorksheetFunction.CountIf(f.Range("A:A"), Id_Project)
        fin = debut + Nb_WP
     
        Set Rng = f.Range("A" & debut & ":" & "A" & fin)
    End If
     
      ColVisu = Array(2, 3)                     ' Adapter
      LargeurCol = Array(35, 457)            ' Adapter
      Me.List_WorkPackages.ColumnCount = UBound(ColVisu) + 1
      Me.List_WorkPackages.ColumnWidths = Join(LargeurCol, ";")
      Me.List_WorkPackages.List = Application.Index(Rng, Evaluate("Row(1:" & Rng.Rows.Count & ")"), ColVisu)
     
    List_WP
    End sub
     
     
     
    Sub List_WP()
        i = 0
        x = Me.List_WorkPackages.Left + 8
        Y = List_WorkPackages.Top - 12
        For Each c In ColVisu
          i = i + 1
          Me("wplist" & i).Caption = Rng.Offset(-1).Item(1, c)
          Me("wplist" & i).Top = Y
          Me("wplist" & i).Left = x
          Me("wplist" & i).Height = 24
          Me("wplist" & i).Width = LargeurCol(i - 1)
          x = x + LargeurCol(i - 1)
        Next
    End Sub

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Darkangel2014 Voir le message
    cela ne fonctionne pas pour autant
    "Ne fonctionne pas", ça n'est pas très parlant comme description de dysfonctionnement.

    Je le répète, tant que tu ne décriras pas ce que tu obtiens et ce que tu souhaites obtenir, on n'avancera pas.

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 163
    Par défaut
    Je vous prie de bien vouloir m'excuser

    rien ne s'affiche dans la listbox je voulais dire, elle reste vide!

    si je laisse le script de set rng à Set Rng = f.Range("A2:M" & f.[A65000].End(xlUp).Row)
    tous les WP de ma base s'affiche, normal me direz vous vu la plage.


    mais si je tente de définir la plage via mon code rien ne s'affiche:
    c'est donc que mon range n'est pas correctement défini à priori

    pour autant
    Id_Project me renvoi le bon id
    NB_WP me rend 16
    debut me rend 128
    fin me rend 144
    et Set f = Sheets("Work-Packages") est bien défini

    donc je pense que set Rng n'est pas correctement reconnu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Valeur_Cherchee = Id_Project
     
    Set PlageDeRecherche = f.Columns(1)
     
    Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
     
    If Not Trouve Is Nothing Then
        debut = Trouve.Row
        Nb_WP = Application.WorksheetFunction.CountIf(f.Range("A:A"), Id_Project)
        fin = debut + Nb_WP
     
        Set Rng = f.Range("A" & debut & ":" & "A" & fin)
    merci par avance pour votre aide

  6. #6
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour,

    Dans ton code ton range est la colonne A.
    Ton code dit colvisu (2,3)

    Colvisu semble est la pour afficher certaines colonne dans ton listbox, or rng n'a qu'une seule colonne en mémoire.
    Il ne saurait donc pas en afficher plusieurs.

    Essaie peut de modifier cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Set Rng = f.Range("A" & debut & ":" & "A" & fin)
    Par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Set Rng = f.Range("A" & debut & ":" & "M" & fin)
    Pour correspondre à l'exemple que tu donnes ci dessus

  7. #7
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 163
    Par défaut
    j'ai fini par trouver
    c'était bien le set range qui posait soucis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rng = f.Range("A" & debut & ":M" & "A" & fin)

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

Discussions similaires

  1. [XL-2019] Utilisation "SET" & "Range"
    Par Stef31 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/11/2019, 12h56
  2. [XL-2000] Probleme de range, ou de set ou autre?
    Par ornicus31 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/03/2013, 15h06
  3. problem optimisation with fmincon
    Par nauleau17 dans le forum MATLAB
    Réponses: 1
    Dernier message: 26/07/2010, 10h25
  4. Enum Set range
    Par domxaline dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 03/06/2010, 14h22
  5. Probleme optimisation de boucles
    Par panda31 dans le forum C
    Réponses: 13
    Dernier message: 06/04/2006, 15h10

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