Copiez les toutes valeurs d'une requête SQL dans un classeur
f894009 Messages postés 17414 Date d'inscription Statut Membre Dernière intervention -
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
- Copiez les toutes valeurs d'une requête SQL dans un classeur
- Imprimer un classeur excel sur mac - Guide
- Copiez la ligne qui indique aux moteurs de recherche de ne pas référencer la page. - Forum Réseaux sociaux
- Ne pas indexer les pages dans les moteurs de recherche ✓ - Forum Référencement
- Logiciel sql - Télécharger - Bases de données
- Copier une feuille excel dans un autre classeur avec liaison ✓ - Forum Excel
4 réponses
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?
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:
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


Et voici un autre cas de figure
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.