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 :

Utiliser la methode Range pour les valeurs d un tableau ? [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 28
    Par défaut Utiliser la methode Range pour les valeurs d un tableau ?
    Bonjour,

    j ai un probleme pour definir un Range. Je m explique : j ai stocke des valeurs de Classeur1 dans un tableau. J ouvre ensuite Classeur2, et pour chaque cellule d un range de Classeur2, je veux chercher la valeur qui correspond dans mon tableau, jusqu a trouver celle qui correspond.
    Mon probleme : definir un range sur mon tableau.
    Voici mon bout de code : (le probleme vient de Set Plage)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each CellWanted In Range(Cells(7, 1), Cells(1100, 1))
        Set Plage = Range(matrix(1, 1), matrix(1, 1100))
        Set C = Plage.Find(CellWanted.Value, LookIn:=xlValues, LookAt:=xlWhole)
        If Not C Is Nothing Then
            'mon code
        End If
     Next
    J avais au depart essaye une autre maniere, qui marche tres bien, mais qui etait beaucoup trop longue. La voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each CellWanted In Range(Cells(7, 1), Cells(1100, 1)) 
        For k = 7 To 1100
           If CellWanted.Value = matrix(0, k) Then
                'mon code
           End If
        Next
    Next
    Mon probleme principal est d optimiser mon code, et pour ca j ai pense au premier bout de code ci dessus, mais je ne trouve pas comment definir mon Range.

    Merci d avance a qui pourra me depanner !

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Certes problème, ci-joint proposition à adapter
    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
    Dim wbk1 As Workbook, wbk2 As Workbook
    Dim Matrix As Range, c As Range, CellWanted As Range
     
    'wbk1: Classeur1
    'wbk2: Classeur2
     
    Set Matrix = wbk1.Sheets("Feuil1").Range("B45:D1500") 'à adapter
    With wbk2.Sheets("Feuil2")                            'à adapter
       For Each CellWanted In .Range("A7:A1100")
          Set c = Matrix.Find(CellWanted.Value, LookIn:=xlValues, LookAt:=xlWhole)
          If Not c Is Nothing Then
             'mon code
          End If
       Next CellWanted
    End With

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 28
    Par défaut
    Merci,

    en effet c est plus simple en definissant Matrix comme un Range.

    Cependant ma matrix precedente etait composee de 2 colonnes:
    - une de nom : c est sur celle la que j utilise .Find, car mon Classeur2 est compose de noms aussi
    - une de valeur, que j utilise dans la suite de mon code.
    C est pour ca que j avais cree un tableau.

    Avec votre methode, je vois ca comme ca :
    je cree 2 Range : Matrix1 et Matrix2, un avec les noms et l autre avec les colonnes, avec le meme nombre de cellules et les memes lignes.
    Ensuite je fais ma recherche sur Matrix1, et je recupere la ligne de la valeur voulue avec c.Row... mais comment trouver la valeur correspondante dans Matrix2 ?

    Bref je ne sais pas si je suis tres claire, mais j ai du mal a comprendre comment utiliser les cellules de mes 2 range...

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Matrix est une plage multi colonnes

    si tu trouves ton c (en colonne 1 de matrix), c.offset(0,1) te donnera la valeur juste à côté en colonne 2 de matrix
    on aurait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set Matrix = wbk1.Sheets("Feuil1").Range("A45:B1500") 'à adapter
    With wbk2.Sheets("Feuil2")                            'à adapter
       For Each CellWanted In .Range("A7:A1100")
          Set c = Matrix.columns(1).Find(CellWanted.Value, LookIn:=xlValues, LookAt:=xlWhole)
          If Not c Is Nothing Then
             msgbox "Nom " & c &", Valeur " & c.offset(0,1)
          End If
       Next CellWanted
    End With

  5. #5
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 28
    Par défaut
    ah oui en effet, en definissant Matrix comme un Range("A45:B1500"), Matrix contient mes colonnes A et B.
    Je n avais pas vu la subtilite au debut, car je ne faisais pas trop le lien entre un Range et un tableau !
    Merci pour ton aide

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

Discussions similaires

  1. [MySQL] Requête pour récupérer toutes les valeurs d'un tableau
    Par djoumusic dans le forum PHP & Base de données
    Réponses: 40
    Dernier message: 24/08/2008, 23h11
  2. [XAML] Calcul pour les valeurs de variable
    Par MrDuChnok dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 05/05/2008, 21h59
  3. Réponses: 9
    Dernier message: 05/11/2007, 12h05
  4. Réponses: 4
    Dernier message: 28/10/2007, 21h01
  5. Equivalent du L en C pour les valeurs hexa
    Par Rustine dans le forum Delphi
    Réponses: 2
    Dernier message: 11/03/2007, 14h05

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