Copiez les toutes valeurs d'une requête SQL dans un classeur

Fermé
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 - 9 août 2022 à 21:20
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 31 août 2022 à 11:58

Bonjour,

J'ai une requête SQL à l'intérieur d'une macro qui cherche la valeur d'un classeur ouvert à l'intérieur d'un classeur fermé. Lorsqu'une ou des valeurs sont trouvées dans le classeur fermé, il copie toutes les valeurs dans le fichier actif alors, j'ai un "ComboBox" qui s'ouvre avec toutes les valeurs trouvées pour que puisse choisir la valeur à copier dans la première cellule du classeur actif. 

J'essais de le modifier, mais sans succès, pour qu'il copie toutes les valeurs sans écraser les valeurs du tableau actif.Je veux enlever le ComboBox qui ne me servira plus dans ce cas là. Exemple: j'ai une valeur en "A2" qui est cherchée dans le classeur fermé et j'ai deux correspondances. Je voudrais remplacer la première valeur en "A2" et copier la ligne "2", en insérer nouvelle ligne pour insérer la deuxième valeur en "A3".

Voici donc le code:

Public T_NT As String
Sub Recherche_Classeur_Ferme()
    Dim Cn As Object
    Dim Rst As Object 'Comparaison des deux fichiers
    Dim Fichier_tester, texte_SQL As String
    Dim NomFeuille As String
    Dim i, Derlig As Integer
    
        '-----------------------------
        Derlig = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
        For i = 2 To Derlig
        With Worksheets(2)
            Sondage = .Cells(i, 2).Value
        End With
        'Définit le classeur fermé servant de base de données
        Fichier_tester = "T:\Geotechnique\Mouvements\Entrepot\BDFS\0_Sondages_a_saisir_Geotec\" & "SONDAGE.xlsx" '"M:\Entrepot\BDFS\0_Sondages_a_saisir_Geotec\" & "SONDAGE.xlsx"
        'Nom de la feuille dans le classeur fermé
        Table = "SONDAGE" & "$"
        plage = "B2:B100000"
        Champ = "NO_SONDAGE"
        '--- Connexion ---
        Set Cn = CreateObject("ADODB.connection")
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
             & Fichier_tester & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
        '-----------------
        '... la requête avec WHERE et LIKE
        texte_SQL = "SELECT " & Champ & " FROM [" & Table & "] WHERE " & Champ & " like '" & "%" & Sondage & "%';" ''" & Sondage & "%';"
        Set Rst = CreateObject("ADODB.Recordset")
        Rst.Open texte_SQL, Cn, adOpenStatic
        'Ecriture dans la feuille de calcul
        If Not Rst.EOF Then
            ActiveSheet.Cells(i, 7).CopyFromRecordset Rst
            Rst.MoveFirst
            tsondage = Rst.GetRows
            Nb = UBound(tsondage, 2)
            If Nb > 0 Then
                TS = "["
                For NS = 0 To Nb: TS = TS & tsondage(0, NS) & " ¤ ": Next NS
                    If NS >= 2 Then
                        UserForm3.Show
                        ActiveSheet.Cells(i, 2) = UserForm3.ComboBox1.Value
                        UserForm3.ComboBox1.Clear
                    Else
                        TS = Left(TS, Len(TS) - 3) & "]"
                        T_NT = T_NT & vbNewLine & Sondage & " en " & Nb + 1 & " exemplaires " & vbNewLine & TS
                    End If
            End If
        Else
            'Infos non trouvees
            T_NT = T_NT & vbNewLine & Sondage
        End If
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
        Next i
End Sub


Je vais vous envoyé une image de la mise en forme de mon classeur.

Merci pour voter aide!


Windows / Chrome 103.0.0.0

4 réponses

bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
9 août 2022 à 21:21

Voici une image du fichier"

0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
10 août 2022 à 14:15

Et voici un autre cas de figure

0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023
10 août 2022 à 14:21

Dans le classeur fermé, il peut y avoir plus d'un numéro d'un sondage correspondant au même numéro. Exemple: C15013-22, F15013-22

Seulement les lettres du début du sondage et les deux chiffres après le tiret vont varier.

0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
9 août 2022 à 22:12

Petite précision, mon code est placé dans un module.

0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
30 août 2022 à 16:14

Bonjour, Est-ce qu'il y a quelqu'un qui pourrait m'aider?

Merci!

0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
30 août 2022 à 18:10

Bonjour,

quelqu'un qui pourrait m'aider?

Si possible, mettre vos fichiers a dispo. Plus facile pour aider

sans écraser les valeurs du tableau actif

Pouvez preciser cette chose?

0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
Modifié le 30 août 2022 à 19:30

Bonjour,

Le résultat de la recherche SQL me renvoie tout les sondages correspondant au numéro recherché.

Exemple: J'ai un fichier Excel qui comporte 2 lignes avec des numéro de sondages (15037 et 15038), plus une entête. Je recherche tout les numéros de sondage correspondants au deux numéro de sondage du tableau. Si je cherche le premier sondage qui est le 15037 dans le fichier Excel fermé "SONDAGE". Le résultat de la requête me donne C15037-22 et FS15037-22. Mais dans le tableau ou fichier Excel actif, il n'y qu'une seule ligne avec le numéro 15037. Si je copie les deux valeurs dans le tableau sans insérer de ligne, alors je vais écraser le numéro de sondage 15038. 

Voici un exemple:

0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
31 août 2022 à 11:58

Bonjour,

15037 et 15038 non c'est 15037 et 15039

je suppose que vous allez chercher vos infoc par N° Sondage.

Sauf erreur de ma part, pour 15037: vos avez le nombre d'enregistrement dans votre code 

Nb = UBound(tsondage, 2)

Utilisez le pour l'insertion de ligne pour ne pas ecraser la ligne du N° suivant

0