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 :

Syntaxe rowsource autre classeur


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
    R&D laboratoire
    Inscrit en
    Janvier 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D laboratoire
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 83
    Par défaut Syntaxe rowsource autre classeur
    Bonjour,
    Dans un classeur, j'ai une combo alimentée par RowSource=plage nommée de 4 colonnes. Lorsque je valide le choix par le bouton OK du userform (code ci-dessous), la macro recherche la valeur sélectionnée puis se décale de 2 ou 3 colonnes pour trouver les valeurs nécessaires à un replace. çà fonctionne tant qu'on reste dans le classeur. Mais le problème est que je vais avoir beaucoup de fichiers à traiter et je ne veux pas avoir à recopier les données à chaque fois dans le fichier contenant la macro

    Quelle est la syntaxe à utiliser dans rowsource lorsqu'on active le userform depuis un autre classeur par un raccourci clavier, faut-il aussi préciser le classeur source dans le code suivant?

    D'avance merci,

    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
    With Sheets("Liste MMM").Range("Marque")
        Set sel = .Find(CboMark.Value)
      End With
     
      AlY = sel.Offset(0, 2).Value
      AlX = sel.Offset(0, 3).Value
     
      ActiveWorkbook.Sheets(1).Select
      LastRow = ActiveSheet.Range("B65000").End(xlUp).Row
      LastRow = CInt(LastRow)
      Range("G10:G" & LastRow).Select
        Selection.Replace What:="X", Replacement:=AlX, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False
        Selection.Replace What:="Y", Replacement:=AlY, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Dommage que tu utilises les sélections sans quoi tu n'avais qu'une chose à changer.
    Déjà, dans ton code, on ne sait pas si Sheets("Liste MMM") est la même feuille que Sheets(1)

    Mais je suppose que tu te proposes de commence par ouvrir tes classeurs
    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
    Dim CL1 as workbook
    Dim FL1 as worksheet
    Dim FL2 as worksheet
         Set CL1 = Workbooks.open (Chemin & NomFich)
         Set FL1 = CL1.Worksheets("Liste MMM")
         Set FL2 = CL1.Sheets(1) 'tu devrais utiliser le nom ici aussi
      With FL1.Range("Marque")
        Set sel = .Find(CboMark.Value)
      End With
     
      AlY = sel.Offset(0, 2).Value
      AlX = sel.Offset(0, 3).Value
     
      LastRow = FL2.Range("B65000").End(xlUp).Row 'si FL2 <> FL1
      'LastRow = CInt(LastRow) 'inutile !
      FL2.Range("G10:G" & LastRow).Replace What:="X", Replacement:=AlX, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False
       FL2.Range("G10:G" & LastRow).Replace What:="Y", Replacement:=AlY, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False

  3. #3
    Membre confirmé
    Homme Profil pro
    R&D laboratoire
    Inscrit en
    Janvier 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D laboratoire
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 83
    Par défaut
    Merci Ousk,
    Je n'ai pas d'avantages à ouvrir les classeurs par macro dans cette appli. le classeur CL1 contenant la macro, inclut aussi la feuille FL1 "listeMM" qui contient la plage nommée.

    En revanche la feuille FL2 du CL2, ne contient qu'une feuille (qui n'a pas encore de nom) avec les données à traiter; j'ai modifié mon code en suivant tes conseils, mais quand j'active le userform contenant la combo depuis CL2 par un raccourci clavier, la combo ne retrouve pas le chemin de la plage nommée qui est dans un autre classeur: quelle syntaxe mettre dans rowsource pour que la combo retrouve ses petits?
    merci et bon WE, Serge

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu peux mettre le code de la combo, serait plus facile
    Précise aussi le classeur et la feuille qui te servent à le charger.
    A+

  5. #5
    Membre confirmé
    Homme Profil pro
    R&D laboratoire
    Inscrit en
    Janvier 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D laboratoire
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 83
    Par défaut
    ??Je n'ai pas de code dans la combo, elle est simplement en relation avec la plage nommée par Rowsource, et on clique sur un des éléments de la liste qui apparaît pour le sélectionner.

    ensuite en cliquant sur un bouton OK du même userform, on active le code inclus ci-dessus.

    Quand on est dans le classeur extérieur qui ne contient qu'une feuille de données, la combo n'affiche plus cette liste. En résumé:

    Classeur 1: les macros, le usf avec la combo, et la plage nommée de référence
    Classeur 2: une feuille de données à traiter.
    On charge le userfrm avec un raccourci depuis le classeur2, c'est juste le lien (rowsource?) entre la combo et sa liste de référence qui ne fonctionne plus quand on est positionné dans le classeur 2

  6. #6
    Membre confirmé
    Homme Profil pro
    R&D laboratoire
    Inscrit en
    Janvier 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D laboratoire
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 83
    Par défaut
    Ou faut-il déclarer la plage nommée autrement pour qu'elle puisse être reconnue depuis un autre classeur? (le code actuel permettant une réactualisation de la plage en cas d'addition)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Dim derlig As Long
    derlig = Range("b2").End(xlDown).Row
    Range("A2:D" & derlig).Name = "Marqueur"
    End Sub

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tout ça me paraît normal.
    Pour renseigner une autre feuille dans un autre classeur, il est nécessaire que tu raffraichisses ton combo, et donc que tu redéfinisses ta source. Mais je ne saisie pas bien la chronologie de ce que tu fais....
    Tu as bien un code pour renseigner ton combo. Rowsource = gnagnagna
    Je demande simplement les références de feuille et de plage que tu as à renseigner. Je m'arrangerai avec mais fais ça

    Pour le principe et si reprend ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim CL1 as workbook
    Dim FL1 as worksheet
    Dim FL2 as worksheet
         Set CL1 = Workbooks.open (Chemin & NomFich)
         Set FL1 = CL1.Worksheets("Liste MMM")
         Set FL2 = CL1.Sheets(1) 'tu devrais utiliser le nom ici aussi
    Si ComboBox.Rowsource fait référence à FL2, tu dois changer l'instance de ta feuille et réinitialiser le combo
    Si tu changes de classeur, il y a bien un moment où tu le changes... C'est là qu'il faut indiquer la nouvelle référence.
    Pour faire ça, tu dois mettre ComboBox.Rowsource = ........ dans une procédure indépendante que tu appelles pour le premier classeur si ça t'intéresse, puis après chaque changement de classeur.

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

Discussions similaires

  1. ListBox.Rowsource depuis un autre classeur
    Par familledacp dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/10/2011, 07h03
  2. [VBA-E] copier une fiche active dans un autre classeur.
    Par Little-Freud dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 15/03/2006, 10h51
  3. [VBA-E]message lors de l'ouverture d'un autre classeur
    Par repié dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/02/2006, 15h30
  4. [VBA] utiliser une macro contenue dans un autre classeur
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 01/02/2006, 18h46
  5. [VBA]Copier le contenu d'une cellule d'un autre classeur
    Par dudu59 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 01/02/2006, 17h08

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