OVH Cloud OVH Cloud

Demande d'aide pour création d'une Macro

7 réponses
Avatar
Nistan
Bonjour,

j'ai trois fichier excel qui se deconposent de la maniére suivante :
Le premier est statique ( Varie peu au cour du temps )
les deux autres sont volatiles ( I.E. extraction créé chaque semaine )

Besoin :
une macro capable d'importer les données d'un volatile vers le statiques. La
macro doit être dans le statique et on doit sélectionner un fichier sur le
disque...

dans le statique, j'ai 15 colonnes (sn, c, si, nu, nur, sp, d,... ) et 500
lignes
dans le volatile j'ai 7 colonnes ( sn, nu, nur, snu, snur, ... ) et 280 lignes

l'information que je recherche est la suivante :

Chaque fois que volatile sn = statiques sn
alors copie volatile nu dans statiques nu ( remplacement de la
valeur précédente )
alors copie volatile nur dans statiques nur ( remplacement de
la valeur précédente )

Merci d'avance pour votre aide.

7 réponses

Avatar
michdenis
Bonjour Nistan,

En supposant que j'ai compris l'énoncé de ta problématique,

A ) copie ce qui suit dans le classeur "Volatile"

B ) Le travail se fait sans devoir ouvrir le fichier "Fixe

C ) Première ligne des 2 fichiers, les étiquettes de colonnes

D ) La requête est ainsi faite : pour toutes les valeurs de la cellule A2:Ax de la feuil1 du fichier Volatile représenté par
l'étiquette de colonne SN, si cette cellule n'est pas vide et qu'elle trouve correspondance dans la colonne SN du fichier fixe,
modifie la Colonne NU avec la nouvelle valeur du fichier Volatile.

E ) Lis attentivement la macro, et assure-toi que le chemin et nom des fichiers sont exactes pour ton application. Il en va de même
pour les noms des feuilles utilisés dans la procédure. Dans la requête [Feuil1] est à remplacer par le nom de la feuille de ton
fichier "Fixe" où se retrouve les données.

F ) Enfin, j'espère que tu t'amuseras un peu !!! ;-))

'--------------------------------------------
Sub Vérification()

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy

Dim Rst As New ADODB.Recordset
Dim Con As ADODB.Connection
Dim NomFichier As String
Dim Rg As Range, C As Range
Dim Requete As String, Nb As Long

NomFichier = ThisWorkbook.Path & "données.xls"

Set Con = New ADODB.Connection
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

'Défini la plage de cellules
With Worksheets("Feuil2") ' A déterminer
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Application.EnableEvents = False

'pour chacune cellule de la plage Rg
For Each C In Rg
If C <> "" Then
Requete = "SELECT SN, Nu From [Feuil1$]" & vbCrLf & _
"Where SN = " & C '"Where SN = '" & C & "'"
'Exécution de la requête
Rst.Open Requete, Con, adOpenStatic, adLockOptimistic
'Si le recordset n'est pas vide...
If Rst.EOF = False Then
Nb = Rst.RecordCount
'Pour tous les enregistrements trouvés
For A = 1 To Nb
Rst(1).Value = C.Offset(, 2)
Rst.MoveNext
Next
'Ferme le recordset
Rst.Close
Else
Rst.Close
End If
End If

Next
Application.EnableEvents = True
Set Rg = Nothing: Set C = Nothing
Con.Close
Set Rst = Nothing: Set Con = Nothing

End Sub
'--------------------------------------------


Salutations!




"Nistan" a écrit dans le message de news:
Bonjour,

j'ai trois fichier excel qui se deconposent de la maniére suivante :
Le premier est statique ( Varie peu au cour du temps )
les deux autres sont volatiles ( I.E. extraction créé chaque semaine )

Besoin :
une macro capable d'importer les données d'un volatile vers le statiques. La
macro doit être dans le statique et on doit sélectionner un fichier sur le
disque...

dans le statique, j'ai 15 colonnes (sn, c, si, nu, nur, sp, d,... ) et 500
lignes
dans le volatile j'ai 7 colonnes ( sn, nu, nur, snu, snur, ... ) et 280 lignes

l'information que je recherche est la suivante :

Chaque fois que volatile sn = statiques sn
alors copie volatile nu dans statiques nu ( remplacement de la
valeur précédente )
alors copie volatile nur dans statiques nur ( remplacement de
la valeur précédente )

Merci d'avance pour votre aide.
Avatar
Nistan
En fait la macro doit être comprise dans le classeur Fixe. En fait le
classeur Fixe comprend plus de données dans la colonnes SN que dans le
fichier Volatile c'est une extraction avec un besoin spécifiques...

je n'ai pas bien compris les lignes suivantes :

NomFichier = ThisWorkbook.Path & "données.xls" ( ?? )

"Data Source=" & NomFichier & ";" & _ ( ?? )

With Worksheets("Feuil2") ( Es ce Feuil2 ou Feuil1 ? )

Je ne vois pas ou on fait référence à la colonnes Nu et NUR dans le code.

Je suis vraiment un débutant, merci pour les explications.



Bonjour Nistan,

En supposant que j'ai compris l'énoncé de ta problématique,

A ) copie ce qui suit dans le classeur "Volatile"

B ) Le travail se fait sans devoir ouvrir le fichier "Fixe

C ) Première ligne des 2 fichiers, les étiquettes de colonnes

D ) La requête est ainsi faite : pour toutes les valeurs de la cellule A2:Ax de la feuil1 du fichier Volatile représenté par
l'étiquette de colonne SN, si cette cellule n'est pas vide et qu'elle trouve correspondance dans la colonne SN du fichier fixe,
modifie la Colonne NU avec la nouvelle valeur du fichier Volatile.

E ) Lis attentivement la macro, et assure-toi que le chemin et nom des fichiers sont exactes pour ton application. Il en va de même
pour les noms des feuilles utilisés dans la procédure. Dans la requête [Feuil1] est à remplacer par le nom de la feuille de ton
fichier "Fixe" où se retrouve les données.

F ) Enfin, j'espère que tu t'amuseras un peu !!! ;-))

'--------------------------------------------
Sub Vérification()

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy

Dim Rst As New ADODB.Recordset
Dim Con As ADODB.Connection
Dim NomFichier As String
Dim Rg As Range, C As Range
Dim Requete As String, Nb As Long

NomFichier = ThisWorkbook.Path & "données.xls"

Set Con = New ADODB.Connection
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

'Défini la plage de cellules
With Worksheets("Feuil2") ' A déterminer
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Application.EnableEvents = False

'pour chacune cellule de la plage Rg
For Each C In Rg
If C <> "" Then
Requete = "SELECT SN, Nu From [Feuil1$]" & vbCrLf & _
"Where SN = " & C '"Where SN = '" & C & "'"
'Exécution de la requête
Rst.Open Requete, Con, adOpenStatic, adLockOptimistic
'Si le recordset n'est pas vide...
If Rst.EOF = False Then
Nb = Rst.RecordCount
'Pour tous les enregistrements trouvés
For A = 1 To Nb
Rst(1).Value = C.Offset(, 2)
Rst.MoveNext
Next
'Ferme le recordset
Rst.Close
Else
Rst.Close
End If
End If

Next
Application.EnableEvents = True
Set Rg = Nothing: Set C = Nothing
Con.Close
Set Rst = Nothing: Set Con = Nothing

End Sub
'--------------------------------------------


Salutations!




"Nistan" a écrit dans le message de news:
Bonjour,

j'ai trois fichier excel qui se deconposent de la maniére suivante :
Le premier est statique ( Varie peu au cour du temps )
les deux autres sont volatiles ( I.E. extraction créé chaque semaine )

Besoin :
une macro capable d'importer les données d'un volatile vers le statiques. La
macro doit être dans le statique et on doit sélectionner un fichier sur le
disque...

dans le statique, j'ai 15 colonnes (sn, c, si, nu, nur, sp, d,... ) et 500
lignes
dans le volatile j'ai 7 colonnes ( sn, nu, nur, snu, snur, ... ) et 280 lignes

l'information que je recherche est la suivante :

Chaque fois que volatile sn = statiques sn
alors copie volatile nu dans statiques nu ( remplacement de la
valeur précédente )
alors copie volatile nur dans statiques nur ( remplacement de
la valeur précédente )

Merci d'avance pour votre aide.





Avatar
Nistan
Merci

Mais comment Fais ton pour :

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy




Bonjour Nistan,

En supposant que j'ai compris l'énoncé de ta problématique,

A ) copie ce qui suit dans le classeur "Volatile"

B ) Le travail se fait sans devoir ouvrir le fichier "Fixe

C ) Première ligne des 2 fichiers, les étiquettes de colonnes

D ) La requête est ainsi faite : pour toutes les valeurs de la cellule A2:Ax de la feuil1 du fichier Volatile représenté par
l'étiquette de colonne SN, si cette cellule n'est pas vide et qu'elle trouve correspondance dans la colonne SN du fichier fixe,
modifie la Colonne NU avec la nouvelle valeur du fichier Volatile.

E ) Lis attentivement la macro, et assure-toi que le chemin et nom des fichiers sont exactes pour ton application. Il en va de même
pour les noms des feuilles utilisés dans la procédure. Dans la requête [Feuil1] est à remplacer par le nom de la feuille de ton
fichier "Fixe" où se retrouve les données.

F ) Enfin, j'espère que tu t'amuseras un peu !!! ;-))

'--------------------------------------------
Sub Vérification()

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy

Dim Rst As New ADODB.Recordset
Dim Con As ADODB.Connection
Dim NomFichier As String
Dim Rg As Range, C As Range
Dim Requete As String, Nb As Long

NomFichier = ThisWorkbook.Path & "données.xls"

Set Con = New ADODB.Connection
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

'Défini la plage de cellules
With Worksheets("Feuil2") ' A déterminer
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Application.EnableEvents = False

'pour chacune cellule de la plage Rg
For Each C In Rg
If C <> "" Then
Requete = "SELECT SN, Nu From [Feuil1$]" & vbCrLf & _
"Where SN = " & C '"Where SN = '" & C & "'"
'Exécution de la requête
Rst.Open Requete, Con, adOpenStatic, adLockOptimistic
'Si le recordset n'est pas vide...
If Rst.EOF = False Then
Nb = Rst.RecordCount
'Pour tous les enregistrements trouvés
For A = 1 To Nb
Rst(1).Value = C.Offset(, 2)
Rst.MoveNext
Next
'Ferme le recordset
Rst.Close
Else
Rst.Close
End If
End If

Next
Application.EnableEvents = True
Set Rg = Nothing: Set C = Nothing
Con.Close
Set Rst = Nothing: Set Con = Nothing

End Sub
'--------------------------------------------


Salutations!




"Nistan" a écrit dans le message de news:
Bonjour,

j'ai trois fichier excel qui se deconposent de la maniére suivante :
Le premier est statique ( Varie peu au cour du temps )
les deux autres sont volatiles ( I.E. extraction créé chaque semaine )

Besoin :
une macro capable d'importer les données d'un volatile vers le statiques. La
macro doit être dans le statique et on doit sélectionner un fichier sur le
disque...

dans le statique, j'ai 15 colonnes (sn, c, si, nu, nur, sp, d,... ) et 500
lignes
dans le volatile j'ai 7 colonnes ( sn, nu, nur, snu, snur, ... ) et 280 lignes

l'information que je recherche est la suivante :

Chaque fois que volatile sn = statiques sn
alors copie volatile nu dans statiques nu ( remplacement de la
valeur précédente )
alors copie volatile nur dans statiques nur ( remplacement de
la valeur précédente )

Merci d'avance pour votre aide.





Avatar
michdenis
Bonjour Nistan,

Est-ce possible que dans la colonne de SN, il y ait des doublons ? Est-ce toutes des entrées différentes ?


Salutations!



"Nistan" a écrit dans le message de news:
Merci

Mais comment Fais ton pour :

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy




Bonjour Nistan,

En supposant que j'ai compris l'énoncé de ta problématique,

A ) copie ce qui suit dans le classeur "Volatile"

B ) Le travail se fait sans devoir ouvrir le fichier "Fixe

C ) Première ligne des 2 fichiers, les étiquettes de colonnes

D ) La requête est ainsi faite : pour toutes les valeurs de la cellule A2:Ax de la feuil1 du fichier Volatile représenté par
l'étiquette de colonne SN, si cette cellule n'est pas vide et qu'elle trouve correspondance dans la colonne SN du fichier fixe,
modifie la Colonne NU avec la nouvelle valeur du fichier Volatile.

E ) Lis attentivement la macro, et assure-toi que le chemin et nom des fichiers sont exactes pour ton application. Il en va de
même
pour les noms des feuilles utilisés dans la procédure. Dans la requête [Feuil1] est à remplacer par le nom de la feuille de ton
fichier "Fixe" où se retrouve les données.

F ) Enfin, j'espère que tu t'amuseras un peu !!! ;-))

'--------------------------------------------
Sub Vérification()

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy

Dim Rst As New ADODB.Recordset
Dim Con As ADODB.Connection
Dim NomFichier As String
Dim Rg As Range, C As Range
Dim Requete As String, Nb As Long

NomFichier = ThisWorkbook.Path & "données.xls"

Set Con = New ADODB.Connection
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

'Défini la plage de cellules
With Worksheets("Feuil2") ' A déterminer
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Application.EnableEvents = False

'pour chacune cellule de la plage Rg
For Each C In Rg
If C <> "" Then
Requete = "SELECT SN, Nu From [Feuil1$]" & vbCrLf & _
"Where SN = " & C '"Where SN = '" & C & "'"
'Exécution de la requête
Rst.Open Requete, Con, adOpenStatic, adLockOptimistic
'Si le recordset n'est pas vide...
If Rst.EOF = False Then
Nb = Rst.RecordCount
'Pour tous les enregistrements trouvés
For A = 1 To Nb
Rst(1).Value = C.Offset(, 2)
Rst.MoveNext
Next
'Ferme le recordset
Rst.Close
Else
Rst.Close
End If
End If

Next
Application.EnableEvents = True
Set Rg = Nothing: Set C = Nothing
Con.Close
Set Rst = Nothing: Set Con = Nothing

End Sub
'--------------------------------------------


Salutations!




"Nistan" a écrit dans le message de news:
Bonjour,

j'ai trois fichier excel qui se deconposent de la maniére suivante :
Le premier est statique ( Varie peu au cour du temps )
les deux autres sont volatiles ( I.E. extraction créé chaque semaine )

Besoin :
une macro capable d'importer les données d'un volatile vers le statiques. La
macro doit être dans le statique et on doit sélectionner un fichier sur le
disque...

dans le statique, j'ai 15 colonnes (sn, c, si, nu, nur, sp, d,... ) et 500
lignes
dans le volatile j'ai 7 colonnes ( sn, nu, nur, snu, snur, ... ) et 280 lignes

l'information que je recherche est la suivante :

Chaque fois que volatile sn = statiques sn
alors copie volatile nu dans statiques nu ( remplacement de la
valeur précédente )
alors copie volatile nur dans statiques nur ( remplacement de
la valeur précédente )

Merci d'avance pour votre aide.





Avatar
Nistan
Bonjour Michdenis,

Il n'y a aucun Doublon possible. Toutes les entrées sont différentes.

Merci


Bonjour Nistan,

Est-ce possible que dans la colonne de SN, il y ait des doublons ? Est-ce toutes des entrées différentes ?


Salutations!



"Nistan" a écrit dans le message de news:
Merci

Mais comment Fais ton pour :

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy




Bonjour Nistan,

En supposant que j'ai compris l'énoncé de ta problématique,

A ) copie ce qui suit dans le classeur "Volatile"

B ) Le travail se fait sans devoir ouvrir le fichier "Fixe

C ) Première ligne des 2 fichiers, les étiquettes de colonnes

D ) La requête est ainsi faite : pour toutes les valeurs de la cellule A2:Ax de la feuil1 du fichier Volatile représenté par
l'étiquette de colonne SN, si cette cellule n'est pas vide et qu'elle trouve correspondance dans la colonne SN du fichier fixe,
modifie la Colonne NU avec la nouvelle valeur du fichier Volatile.

E ) Lis attentivement la macro, et assure-toi que le chemin et nom des fichiers sont exactes pour ton application. Il en va de
même
pour les noms des feuilles utilisés dans la procédure. Dans la requête [Feuil1] est à remplacer par le nom de la feuille de ton
fichier "Fixe" où se retrouve les données.

F ) Enfin, j'espère que tu t'amuseras un peu !!! ;-))

'--------------------------------------------
Sub Vérification()

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy

Dim Rst As New ADODB.Recordset
Dim Con As ADODB.Connection
Dim NomFichier As String
Dim Rg As Range, C As Range
Dim Requete As String, Nb As Long

NomFichier = ThisWorkbook.Path & "données.xls"

Set Con = New ADODB.Connection
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

'Défini la plage de cellules
With Worksheets("Feuil2") ' A déterminer
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Application.EnableEvents = False

'pour chacune cellule de la plage Rg
For Each C In Rg
If C <> "" Then
Requete = "SELECT SN, Nu From [Feuil1$]" & vbCrLf & _
"Where SN = " & C '"Where SN = '" & C & "'"
'Exécution de la requête
Rst.Open Requete, Con, adOpenStatic, adLockOptimistic
'Si le recordset n'est pas vide...
If Rst.EOF = False Then
Nb = Rst.RecordCount
'Pour tous les enregistrements trouvés
For A = 1 To Nb
Rst(1).Value = C.Offset(, 2)
Rst.MoveNext
Next
'Ferme le recordset
Rst.Close
Else
Rst.Close
End If
End If

Next
Application.EnableEvents = True
Set Rg = Nothing: Set C = Nothing
Con.Close
Set Rst = Nothing: Set Con = Nothing

End Sub
'--------------------------------------------


Salutations!




"Nistan" a écrit dans le message de news:
Bonjour,

j'ai trois fichier excel qui se deconposent de la maniére suivante :
Le premier est statique ( Varie peu au cour du temps )
les deux autres sont volatiles ( I.E. extraction créé chaque semaine )

Besoin :
une macro capable d'importer les données d'un volatile vers le statiques. La
macro doit être dans le statique et on doit sélectionner un fichier sur le
disque...

dans le statique, j'ai 15 colonnes (sn, c, si, nu, nur, sp, d,... ) et 500
lignes
dans le volatile j'ai 7 colonnes ( sn, nu, nur, snu, snur, ... ) et 280 lignes

l'information que je recherche est la suivante :

Chaque fois que volatile sn = statiques sn
alors copie volatile nu dans statiques nu ( remplacement de la
valeur précédente )
alors copie volatile nur dans statiques nur ( remplacement de
la valeur précédente )

Merci d'avance pour votre aide.










Avatar
michdenis
Bonjour Nistan,

Cela va te demander quand même un peu d'effort si tu ne connais "rien" à vba.

Tu copies le code qui suit dans ton fichier "fixe" dans un module standard.

J'ai pris pour acquis que la colonne SN était en colonne A:A dans les 2 fichiers. Volatile et fixe.

Dans le cas où il y a une correspondance entre les valeurs des 2 colonnes sn des 2 fichiers "Fixe" et "Volatile", la procédure va
modifier la colonne C:C du fichier Fxe supposément représentant la colonne NU avec les nouvelles valeurs du fichier volatile Colonne
C:C aussi représentant la colonne NU.

Tout ceci peut être modifié selon la configuration de ton projet.


'--------------------------------
Sub checkSn()

Dim RgSource As Range
Dim RgImport As Range

Application.ScreenUpdating = False

'La feuille où sont tes données
With Worksheets("Feuil1") ' Nom à déterminer
Set RgSource = .Range("a1:A" & .Range("A65536").End(xlUp).Row)
End With

'Ouverture de ton fichier Volatile
'Tu remplace "C:AtravailDonnées.xls" par le chemin
'et le nom de ton fichier volatile
Workbooks.Open "C:AtravailDonnées.xls"

With ActiveWorkbook
'Nom de la feuille de ton fichier volatile
With .Worksheets("Feuil1") ' à déterminer
Set RgImport = .Range("a1:A" & .Range("A65536").End(xlUp).Row)
End With

On Error Resume Next
For Each C In RgImport
a = WorksheetFunction.Match(C.Value, RgSource, 0)
If Not IsError(a) Then
'2 = 2 colonnes à droite de A
RgSource(a).Offset(, 2).Value = C.Offset(, 2).Value
Else
Err = 0
End If
Next
.Close
End With
Set RgSource = Nothing: Set RgImport = Nothing

End Sub
'--------------------------------


Salutations!




"Nistan" a écrit dans le message de news:
Bonjour Michdenis,

Il n'y a aucun Doublon possible. Toutes les entrées sont différentes.

Merci


Bonjour Nistan,

Est-ce possible que dans la colonne de SN, il y ait des doublons ? Est-ce toutes des entrées différentes ?


Salutations!



"Nistan" a écrit dans le message de news:
Merci

Mais comment Fais ton pour :

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy




Bonjour Nistan,

En supposant que j'ai compris l'énoncé de ta problématique,

A ) copie ce qui suit dans le classeur "Volatile"

B ) Le travail se fait sans devoir ouvrir le fichier "Fixe

C ) Première ligne des 2 fichiers, les étiquettes de colonnes

D ) La requête est ainsi faite : pour toutes les valeurs de la cellule A2:Ax de la feuil1 du fichier Volatile représenté par
l'étiquette de colonne SN, si cette cellule n'est pas vide et qu'elle trouve correspondance dans la colonne SN du fichier fixe,
modifie la Colonne NU avec la nouvelle valeur du fichier Volatile.

E ) Lis attentivement la macro, et assure-toi que le chemin et nom des fichiers sont exactes pour ton application. Il en va de
même
pour les noms des feuilles utilisés dans la procédure. Dans la requête [Feuil1] est à remplacer par le nom de la feuille de ton
fichier "Fixe" où se retrouve les données.

F ) Enfin, j'espère que tu t'amuseras un peu !!! ;-))

'--------------------------------------------
Sub Vérification()

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy

Dim Rst As New ADODB.Recordset
Dim Con As ADODB.Connection
Dim NomFichier As String
Dim Rg As Range, C As Range
Dim Requete As String, Nb As Long

NomFichier = ThisWorkbook.Path & "données.xls"

Set Con = New ADODB.Connection
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

'Défini la plage de cellules
With Worksheets("Feuil2") ' A déterminer
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Application.EnableEvents = False

'pour chacune cellule de la plage Rg
For Each C In Rg
If C <> "" Then
Requete = "SELECT SN, Nu From [Feuil1$]" & vbCrLf & _
"Where SN = " & C '"Where SN = '" & C & "'"
'Exécution de la requête
Rst.Open Requete, Con, adOpenStatic, adLockOptimistic
'Si le recordset n'est pas vide...
If Rst.EOF = False Then
Nb = Rst.RecordCount
'Pour tous les enregistrements trouvés
For A = 1 To Nb
Rst(1).Value = C.Offset(, 2)
Rst.MoveNext
Next
'Ferme le recordset
Rst.Close
Else
Rst.Close
End If
End If

Next
Application.EnableEvents = True
Set Rg = Nothing: Set C = Nothing
Con.Close
Set Rst = Nothing: Set Con = Nothing

End Sub
'--------------------------------------------


Salutations!




"Nistan" a écrit dans le message de news:

Bonjour,

j'ai trois fichier excel qui se deconposent de la maniére suivante :
Le premier est statique ( Varie peu au cour du temps )
les deux autres sont volatiles ( I.E. extraction créé chaque semaine )

Besoin :
une macro capable d'importer les données d'un volatile vers le statiques. La
macro doit être dans le statique et on doit sélectionner un fichier sur le
disque...

dans le statique, j'ai 15 colonnes (sn, c, si, nu, nur, sp, d,... ) et 500
lignes
dans le volatile j'ai 7 colonnes ( sn, nu, nur, snu, snur, ... ) et 280 lignes

l'information que je recherche est la suivante :

Chaque fois que volatile sn = statiques sn
alors copie volatile nu dans statiques nu ( remplacement de la
valeur précédente )
alors copie volatile nur dans statiques nur ( remplacement de
la valeur précédente )

Merci d'avance pour votre aide.










Avatar
Nistan
Bonsoir,

Après quelques test, cela fonctionne parfaitement, cela est vraiment
formidable, avec l'explication de l'execution, j'ai même modifier la macro
pour faire plusieur colonnes différentes.

Grand Merci

Cordialement,


Bonjour Nistan,

Cela va te demander quand même un peu d'effort si tu ne connais "rien" à vba.

Tu copies le code qui suit dans ton fichier "fixe" dans un module standard.

J'ai pris pour acquis que la colonne SN était en colonne A:A dans les 2 fichiers. Volatile et fixe.

Dans le cas où il y a une correspondance entre les valeurs des 2 colonnes sn des 2 fichiers "Fixe" et "Volatile", la procédure va
modifier la colonne C:C du fichier Fxe supposément représentant la colonne NU avec les nouvelles valeurs du fichier volatile Colonne
C:C aussi représentant la colonne NU.

Tout ceci peut être modifié selon la configuration de ton projet.


'--------------------------------
Sub checkSn()

Dim RgSource As Range
Dim RgImport As Range

Application.ScreenUpdating = False

'La feuille où sont tes données
With Worksheets("Feuil1") ' Nom à déterminer
Set RgSource = .Range("a1:A" & .Range("A65536").End(xlUp).Row)
End With

'Ouverture de ton fichier Volatile
'Tu remplace "C:AtravailDonnées.xls" par le chemin
'et le nom de ton fichier volatile
Workbooks.Open "C:AtravailDonnées.xls"

With ActiveWorkbook
'Nom de la feuille de ton fichier volatile
With .Worksheets("Feuil1") ' à déterminer
Set RgImport = .Range("a1:A" & .Range("A65536").End(xlUp).Row)
End With

On Error Resume Next
For Each C In RgImport
a = WorksheetFunction.Match(C.Value, RgSource, 0)
If Not IsError(a) Then
'2 = 2 colonnes à droite de A
RgSource(a).Offset(, 2).Value = C.Offset(, 2).Value
Else
Err = 0
End If
Next
.Close
End With
Set RgSource = Nothing: Set RgImport = Nothing

End Sub
'--------------------------------


Salutations!




"Nistan" a écrit dans le message de news:
Bonjour Michdenis,

Il n'y a aucun Doublon possible. Toutes les entrées sont différentes.

Merci


Bonjour Nistan,

Est-ce possible que dans la colonne de SN, il y ait des doublons ? Est-ce toutes des entrées différentes ?


Salutations!



"Nistan" a écrit dans le message de news:
Merci

Mais comment Fais ton pour :

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy




Bonjour Nistan,

En supposant que j'ai compris l'énoncé de ta problématique,

A ) copie ce qui suit dans le classeur "Volatile"

B ) Le travail se fait sans devoir ouvrir le fichier "Fixe

C ) Première ligne des 2 fichiers, les étiquettes de colonnes

D ) La requête est ainsi faite : pour toutes les valeurs de la cellule A2:Ax de la feuil1 du fichier Volatile représenté par
l'étiquette de colonne SN, si cette cellule n'est pas vide et qu'elle trouve correspondance dans la colonne SN du fichier fixe,
modifie la Colonne NU avec la nouvelle valeur du fichier Volatile.

E ) Lis attentivement la macro, et assure-toi que le chemin et nom des fichiers sont exactes pour ton application. Il en va de
même
pour les noms des feuilles utilisés dans la procédure. Dans la requête [Feuil1] est à remplacer par le nom de la feuille de ton
fichier "Fixe" où se retrouve les données.

F ) Enfin, j'espère que tu t'amuseras un peu !!! ;-))

'--------------------------------------------
Sub Vérification()

'requiert la bibliothèque suivante :
'Outils / référence / à cocher
'Microsoft Activex Data Objects 2.x Librairy

Dim Rst As New ADODB.Recordset
Dim Con As ADODB.Connection
Dim NomFichier As String
Dim Rg As Range, C As Range
Dim Requete As String, Nb As Long

NomFichier = ThisWorkbook.Path & "données.xls"

Set Con = New ADODB.Connection
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

'Défini la plage de cellules
With Worksheets("Feuil2") ' A déterminer
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Application.EnableEvents = False

'pour chacune cellule de la plage Rg
For Each C In Rg
If C <> "" Then
Requete = "SELECT SN, Nu From [Feuil1$]" & vbCrLf & _
"Where SN = " & C '"Where SN = '" & C & "'"
'Exécution de la requête
Rst.Open Requete, Con, adOpenStatic, adLockOptimistic
'Si le recordset n'est pas vide...
If Rst.EOF = False Then
Nb = Rst.RecordCount
'Pour tous les enregistrements trouvés
For A = 1 To Nb
Rst(1).Value = C.Offset(, 2)
Rst.MoveNext
Next
'Ferme le recordset
Rst.Close
Else
Rst.Close
End If
End If

Next
Application.EnableEvents = True
Set Rg = Nothing: Set C = Nothing
Con.Close
Set Rst = Nothing: Set Con = Nothing

End Sub
'--------------------------------------------


Salutations!




"Nistan" a écrit dans le message de news:

Bonjour,

j'ai trois fichier excel qui se deconposent de la maniére suivante :
Le premier est statique ( Varie peu au cour du temps )
les deux autres sont volatiles ( I.E. extraction créé chaque semaine )

Besoin :
une macro capable d'importer les données d'un volatile vers le statiques. La
macro doit être dans le statique et on doit sélectionner un fichier sur le
disque...

dans le statique, j'ai 15 colonnes (sn, c, si, nu, nur, sp, d,... ) et 500
lignes
dans le volatile j'ai 7 colonnes ( sn, nu, nur, snu, snur, ... ) et 280 lignes

l'information que je recherche est la suivante :

Chaque fois que volatile sn = statiques sn
alors copie volatile nu dans statiques nu ( remplacement de la
valeur précédente )
alors copie volatile nur dans statiques nur ( remplacement de
la valeur précédente )

Merci d'avance pour votre aide.