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

Excel Discussion :

Adapter une macro pour fichier fermé [XL-2016]


Sujet :

Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Secrétaire
    Inscrit en
    avril 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2020
    Messages : 29
    Points : 25
    Points
    25
    Par défaut Adapter une macro pour fichier fermé
    Bonjour,

    J'ai une macro qui fonctionne très bien pour effectuer une recherche verticale dans une feuille "Base NOI" malheureusement cette feuille à 837947 ligne ce qui me fait un fichier de plus de 37Mo.
    J'aimerai donc faire un fichier "NOI" avec juste cette feuille et faire tourner mon fichier "Suivi NOI" en faisant ma recherche verticale sans ouvrir le fichier "NOI"

    je pourrai le faire avec cette formule dans une cellule =RECHERCHEV('2023'!J8;'C:\Users\e.finet1\Desktop\[NOI.xlsx]Rapport 1'!$A:$B;2;FAUX)

    Mais voilà, comme le fichier a plusieurs utilisateur je préfère ne pas mettre de formule.

    J'ai essayé avec une requete :
    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
     
    Sub RequeteClasseurFerme()
        Dim Cn As ADODB.Connection
        Dim Fichier As String
        Dim NomFeuille As String, texte_SQL As String
        Dim Rst As ADODB.Recordset
     
        'Définit le classeur fermé servant de base de données
        Fichier = "C:\Users\e.finet1\Desktop\NOI.xlsx"
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "Rapport 1"
     
        Set Cn = New ADODB.Connection
     
        '--- Connection ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
            .Open
        End With
    mais bon soit je m'y prend mal soit je ne suis pas doué car j'ai un message d'erreur au niveau de .Open (La table externe n'est pas dans le format attendu.)

    Voici la macro qui fonctionne quand la recherche est dans la feuille de mon classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    If Target.Column = 10 Then
        cherche = Cells(Target.Row, 10).Value
        x = WorksheetFunction.CountIf(Worksheets("Base NOI").Range("a:a"), cherche)
        If x = 1 Then
            Set ou = Worksheets("Base NOI").Range("a:a").EntireColumn
            Set noi = ou.Find(cherche, ou.Range("a1"), , xlWhole, xlByRows, xlNext, False)
            nomnoi = noi.Offset(0, 1).Value
            Cells(Target.Row, 11).Value = nomnoi
            Cells(Target.Row, 12).Select
        End If
    End If
    Bref pour simplifier je cherche à remplacer Worksheet par C:\Users\e.finet1\Desktop\NOI.xlsx

    Merci pour votre aide.

  2. #2
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 1 307
    Points : 2 022
    Points
    2 022
    Par défaut
    Bonjour,
    ";Extended Properties=Excel 12.0;"

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Secrétaire
    Inscrit en
    avril 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2020
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Merci,
    Mais maintenant j'ai le message d'erreur "Pilote ISAM introuvable"

    Je pense que je vais finir par faire une macro qui ecrira la formule =rechercheV(....) qui en prendra le résultat et effacera la formule.

    Cordialement

  4. #4
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 1 307
    Points : 2 022
    Points
    2 022
    Par défaut
    ";Extended Properties=Excel 14.0;" ???? 365?

    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Base & ";Extended Properties=""Excel 12.0;HDR=YES;"""

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Secrétaire
    Inscrit en
    avril 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2020
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Pouvez-vous m'aider à transformer le VBA en SQL, j'ai beau essayer je n'y arrive pas.
    Le but étant de faire une simple recherche verticale sur un fichier fermé.
    Je ne m'attendais pas à ce que cela soit si compliqué.
    Le fichier fermé contient plus de 800.000 lignes avec deux colonnes.
    J'ai essayé avec SELECT FROM WHERE ou SELECT LIKE mais bon il me dit soit qu'il ne trouve pas la feuille soit que la table est plus grande que celle défini, alors que je ne défini rien...

    Merci pour votre aide

    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
     
    Dim Cn As ADODB.Connection
        Dim ADOCommand As ADODB.Command
        Dim Fichier As String, Cellule As String, Feuille As String
        Dim NomFeuille As String, texte_SQL As String
        Dim Rst As ADODB.Recordset
     
        Cellule = Cells(5, 10).Value
        'Définit le classeur fermé servant de base de données
        Fichier = "C:\Users\e.finet1\Desktop\NOI.xlsx"
        'Nom de la feuille dans le classeur fermé
        Feuille = "Rapport 1"
     
        Set Cn = New ADODB.Connection
     
            '--- Connection ---
        With Cn
            .Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=" & Base & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .ConnectionString = "Data Source=" & Fichier & ";Extended Properties=Excel 12.0;"
            .Open
        End With
     
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Cn
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
        Set Rst = Cn.Select("[" & Feuille & Cellule & "]")
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
     
    End Sub

  6. #6
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 1 307
    Points : 2 022
    Points
    2 022
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim Fichier As String, Rs As Object, Cellule As String
    Fichier = "C:\Users\e.finet1\Desktop\NOI.xlsx"
    Cellule = Replace(Cells(5, 10).Address, "$", ""): Cellule = Cellule & ":" & Cellule
    With CreateObject("Adodb.connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=no;"""
    'Select * From [Rapport 1$J5:J5] where [F1] like '%toto%'
        Set Rs = .Execute("Select * From [Rapport 1$" & Cellule & "] where [F1] like '%toto%'")
        .Close
    End With
    End Sub

  7. #7
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 1 307
    Points : 2 022
    Points
    2 022
    Par défaut
    Peux-tu mètre un fichier source et un cible annonymisé?

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Secrétaire
    Inscrit en
    avril 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2020
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Désolé pour le retard mais je n'étais pas à mon travail ces derniers temps.
    Voici les fichiers.
    Le but est de saisir, dans le fichier Suivi, un NOI dans la colonne J et que s'inscrive la désignation dans la colonne K après une recherche verticale dans le fichier NOI
    J'ai réduit au maximum la taille de mes fichiers pour les poster.

    la macro dans la feuille 2023 fonctionne mais cela m'oblige à mettre une feuille Base NOI et normalement cette feuille comporte plus de 800.000 lignes.

    Encore merci pour votre aide
    Fichiers attachés Fichiers attachés

  9. #9
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 1 307
    Points : 2 022
    Points
    2 022
    Par défaut
    Bonjour,
    j'ai mis NOI.xlsx dans le même répertoire que Suivi.xlsm
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cn As String, cherche As Object, Sql As String
    Cn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\NOI.xlsx;Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;"""
    If Target.Column = 10 And Target.Row > 1 And CStr(Target) <> "" Then
    Sql = "select * from [Rapport 1$] where [NOI]='" & Target.Text & "'"
       Set cherche = CreateObject("AdoDb.Recordset")
      cherche.Open Sql, Cn
      If Not cherche.EOF Then
        Target.Offset(, 1) = cherche("Description")
      End If
    '    x = WorksheetFunction.CountIf(Worksheets("Base NOI").Range("a:a"), cherche)
    '    If x = 1 Then
    '        Set ou = Worksheets("Base NOI").Range("a:a").EntireColumn
    '        Set noi = ou.Find(cherche, ou.Range("a1"), , xlWhole, xlByRows, xlNext, False)
    '        nomnoi = noi.Offset(0, 1).Value
    '        Cells(Target.Row, 11).Value = nomnoi
    '        Cells(Target.Row, 12).Select
    '    End If
    End If
    End Sub

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Secrétaire
    Inscrit en
    avril 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2020
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Merci cela fonctionne très bien

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

Discussions similaires

  1. [Toutes versions] Intégrer une boucle dans une macro pour lire des données d'un fichier fermé
    Par louisapt dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/06/2021, 16h06
  2. Réponses: 0
    Dernier message: 23/03/2012, 09h59
  3. Réponses: 0
    Dernier message: 11/11/2010, 08h30
  4. [XL-2007] Une macro pour copier seulement certaines lignes d'un fichier à un autre
    Par asgard78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/10/2010, 14h10
  5. [XL-2003] Créer une macro pour plusieurs fichiers excel
    Par bocki dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/06/2009, 22h53

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