OVH Cloud OVH Cloud

Importation automatique de données

13 réponses
Avatar
pascal B
Bonjour à tous,

je souhaite effectuer les choses suivantes :
1) selectionner plusieurs cellule de la feuille "ENCODAGE" et les copier
dans l'ordre sur une même ligne de la Feuille "DOSSIERS", ou je coince c'est
pour qu'il commence chaque série sur une nouvelle ligne à partir de la 1er
cellule en colonne A non vide et qu'il respecte l'ordre sur la ligne.

2) une macro pour que dans la feuille "DOSSIERS" il recherche toutes les
cellules non vides d'une colonne définie et déplace vers la feuille
"DOSSIERS CLOTURE" les lignes complètes qui respectent ce critère.

voilà j'ai parcouru la FAQ sans y trouver la solution ou peut être sans la
voir.

je vous remercie d'avance pour votre aide

salutations.

Pascal

10 réponses

1 2
Avatar
pascal B
Bonjour à tous,

ai je commis une erreur ? car je n'obtiens aucune réponses à ma demande. et
en parcourant ce forum j'ai vu qu'il fonctionnait très bien et très vite,
d'où ma question.

si c'est le cas dites le moi et je me corrigerai pour l'avenir. si la
fonction n'existe pas pourriez vous me le dire également, car c'est pour mon
travail.

voilà merci d'avance à vous tous, et je vous prie de me pardonner pour mes
erreurs.

Salutations

Pascal
Avatar
Philippe.R
Bonjour Pascal,
Rassure toi, tu n'as pas commis d'erreur majeur, si ce n'est celle de poster plusieurs fois ta question.
Comme tu l'observes à juste titre, MPFE est généralement très réactif ; cependant il arrive tout de même
que personne ne se sente inspiré par une question, ou ne possède de réponse appropriée.
Comme la plupart des contributeurs utilisent un logiciel de messagerie pour suivre le forum, ils ont
encore un accès aisé à ta précédente question (hier à 18h00 heure de Paris), et quand on sait que bon
nombre d'entre eux passent en revue la totalité des messages (ne serait ce qu'en diagonale) et plus
particulièrement ceux qui n'ont pas encore reçu de réponse, il est plutôt inutile de reposter
régulièrement la question, sauf à l'enrichir de précisions inédites susceptibles d'exciter le neurone.
;o))
Sauf à être condamné à subir l'accès aux forums via le web, clique sur le lien présent dans ma
signature, ou bien, sur excelabo, visite cette page :
http://www.excelabo.net/mpfe/connexion.php
--
Amicales Salutations
XL 97 / 2000 / 2002
Retirer A_S_ pour répondre en privé.
Préférez suivre facilement sur le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"pascal B" a écrit dans le message de news:

Bonjour à tous,

ai je commis une erreur ? car je n'obtiens aucune réponses à ma demande. et en parcourant ce forum
j'ai vu qu'il fonctionnait très bien et très vite, d'où ma question.

si c'est le cas dites le moi et je me corrigerai pour l'avenir. si la fonction n'existe pas pourriez
vous me le dire également, car c'est pour mon travail.

voilà merci d'avance à vous tous, et je vous prie de me pardonner pour mes erreurs.

Salutations

Pascal



Avatar
FxM
Bonjour à tous,

ai je commis une erreur ? car je n'obtiens aucune réponses à ma demande. et
en parcourant ce forum j'ai vu qu'il fonctionnait très bien et très vite,
d'où ma question.

si c'est le cas dites le moi et je me corrigerai pour l'avenir. si la
fonction n'existe pas pourriez vous me le dire également, car c'est pour mon
travail.

voilà merci d'avance à vous tous, et je vous prie de me pardonner pour mes
erreurs.

Salutations

Pascal




Bonjour Pascal,

NON ... tu n'as pas fait d'erreur. Il y a bien les mots-clé et tout et
tout. On ne peut rêver mieux. Il est par ailleurs peu probable que ce
que tu souhaites ne puisse être fait.
En fait, le problème est de démarrer notre 1/2 neurone de bolnde pas
réveillée :o)
Tu as du remarquer que les GC (gentils contributeurs et gentielles
contributrices) du dimanche matin se font peu nombreux/-ses et voguent
que dis-je divaguent dans le HS un peu plus que d'habitude. Si les
autres GC sont comme moi, il vont ou viennent de la douche. Voui, y'a du
laisser-aller, je l'avoue :o)

Pour ma part, je vais (dans l'ordre) faire trempette, casser une graine
puis jeter un z'ieux à ta question ;o)

@+
FxM

Avatar
FxM
Re-bonjour,

Reprenons donc :
Q1) <snip> où je coince c'est pour qu'il commence chaque série sur une
nouvelle ligne à partir de la 1er cellule en colonne A non vide

R: quelque chose comme :
with sheets("DOSSIERS")
lig = .range("A65536").end(xlup).row+1
.range("A" & lig).select
end with

Q: et qu'il respecte l'ordre sur la ligne.
R: Qu'appelles-tu "dans l'ordre" ? Si tu sélectionnes les cellules A1,
C5, B3 puis A7, dans quel ordre souhaites-tu voir apparaître les données ?


Q2) une macro pour que dans la feuille "DOSSIERS" il recherche toutes
les cellules non vides d'une colonne définie et déplace vers la feuille
"DOSSIERS CLOTURE" les lignes complètes qui respectent ce critère.

J'ai considéré qu'il n'y avait pas d'ordre à respecter.
Alt-F11 | insertion | module
Recopies-y ce qui suit (attention aux éventuelles coupures de ligne):

Sub Macro1()
'feuille de départ
feu_dep = "dossiers"
'feuille d'arrivée
feu_arr = "dossiers cloture"
'colonne à vérifier
colonne = "B"

'avec la feuille de départ
With Sheets(feu_dep)
'l'activer
.Activate
'chercher la dernière ligne et la dernière colonne
Lx = .Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
Cx = .Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
'pour vérifier qu'il y a bien concordance avec la colonne
'à vérifier
plagetout = .Range(.Cells(1, 1), .Cells(Lx, Cx)).Address
col1 = .Range(colonne & ":" & colonne).Address
Set check = Application.Intersect(Range(plagetout), Range(col1))
If check Is Nothing Then MsgBox "Zone incompatibles": Exit Sub

'parcourir toutes les lignes ) partir de la fin
For lig = Lx To 1 Step -1
'si la cellule est vide
If IsEmpty(.Cells(lig, colonne)) Then
'couper
.Rows(lig & ":" & lig).Cut
'aller sur la feuille d'arivée
Sheets(feu_arr).Activate
'chercher la dernière ligne
On Error Resume Next
lig2 = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
col2 = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
If Err > 0 Then Err.Clear: lig2 = 0
On Error GoTo 0
'coller
Range("A" & lig2 + 1).Select
ActiveSheet.Paste
'retourner sur la feuille de départ
.Activate
End If
Next lig
End With
End Sub

Voilà, voilà. testé sous Excel2000 / Win98SE

@+
FxM
Avatar
pascal B
Bonjour à toi Philippe,

merci de m'avoir rassuré :), je croyais vraiment avoir commis une grosse
bourde. désolé pour le second poste mais il est vrai que je suis un peu
stressé par le temps qui passe et j'ai oublié un peu vite que vous n'êtes
pas à mon service!!! méa culpa.

merci encore et bon week-end.

"Philippe.R" a écrit dans le message de news:
e0QzE$
Bonjour Pascal,
Rassure toi, tu n'as pas commis d'erreur majeur, si ce n'est celle de
poster plusieurs fois ta question.
Comme tu l'observes à juste titre, MPFE est généralement très réactif ;
cependant il arrive tout de même que personne ne se sente inspiré par une
question, ou ne possède de réponse appropriée.
Comme la plupart des contributeurs utilisent un logiciel de messagerie
pour suivre le forum, ils ont encore un accès aisé à ta précédente
question (hier à 18h00 heure de Paris), et quand on sait que bon nombre
d'entre eux passent en revue la totalité des messages (ne serait ce qu'en
diagonale) et plus particulièrement ceux qui n'ont pas encore reçu de
réponse, il est plutôt inutile de reposter régulièrement la question, sauf
à l'enrichir de précisions inédites susceptibles d'exciter le neurone.
;o))
Sauf à être condamné à subir l'accès aux forums via le web, clique sur le
lien présent dans ma signature, ou bien, sur excelabo, visite cette page :
http://www.excelabo.net/mpfe/connexion.php
--
Amicales Salutations
XL 97 / 2000 / 2002
Retirer A_S_ pour répondre en privé.
Préférez suivre facilement sur le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"pascal B" a écrit dans le
message de news:
Bonjour à tous,

ai je commis une erreur ? car je n'obtiens aucune réponses à ma demande.
et en parcourant ce forum j'ai vu qu'il fonctionnait très bien et très
vite, d'où ma question.

si c'est le cas dites le moi et je me corrigerai pour l'avenir. si la
fonction n'existe pas pourriez vous me le dire également, car c'est pour
mon travail.

voilà merci d'avance à vous tous, et je vous prie de me pardonner pour
mes erreurs.

Salutations

Pascal







Avatar
pascal B
Bonjour à toi Fxm,

merci de m'avoir rassuré :), je croyais vraiment avoir commis une grosse
bourde. désolé pour le second poste mais il est vrai que je suis un peu
stressé par le temps qui passe et j'ai oublié un peu vite que vous n'êtes
pas à mon service!!! méa culpa.

merci encore et bon week-end.

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

Bonjour à tous,

ai je commis une erreur ? car je n'obtiens aucune réponses à ma demande.
et en parcourant ce forum j'ai vu qu'il fonctionnait très bien et très
vite, d'où ma question.

si c'est le cas dites le moi et je me corrigerai pour l'avenir. si la
fonction n'existe pas pourriez vous me le dire également, car c'est pour
mon travail.

voilà merci d'avance à vous tous, et je vous prie de me pardonner pour
mes erreurs.

Salutations

Pascal


Bonjour Pascal,

NON ... tu n'as pas fait d'erreur. Il y a bien les mots-clé et tout et
tout. On ne peut rêver mieux. Il est par ailleurs peu probable que ce que
tu souhaites ne puisse être fait.
En fait, le problème est de démarrer notre 1/2 neurone de bolnde pas
réveillée :o)
Tu as du remarquer que les GC (gentils contributeurs et gentielles
contributrices) du dimanche matin se font peu nombreux/-ses et voguent que
dis-je divaguent dans le HS un peu plus que d'habitude. Si les autres GC
sont comme moi, il vont ou viennent de la douche. Voui, y'a du
laisser-aller, je l'avoue :o)

Pour ma part, je vais (dans l'ordre) faire trempette, casser une graine
puis jeter un z'ieux à ta question ;o)

@+
FxM



Avatar
pascal B
Re bonjour FxM,

et merci pour ta rapidité. je vais tester la point 2 de suite et te confirme
si j'ai réussi a le faire fonctionner. pour le point 1
le respect de l'ordre c'est ceci :

"ENCODAGE" "DEMANDES INTRODUITES"
A13 = A2 et le suivant A3 et ainsi de suite
B13 = B2 B3
E13 = C2 C3
B8 = D2 D3
E8 = E2 E3
F8 = F2 F3
D30 = G2 G3
D31 = H2 H3
D33 = I2 I3
D35 = J2 J3
G39 = K2 K3

"ENCODAGE" me sert à obtenir et calculer tous les renseignements qui doivent
êtres enregistrés sur "DEMANDES INTRODUITES" pour chaque individus.

voila merci beaucoup
@+
Pascal

"FxM" a écrit dans le message de news:
uA$
Avatar
FxM
Re bonjour FxM,

et merci pour ta rapidité. je vais tester la point 2 de suite et te confirme
si j'ai réussi a le faire fonctionner. pour le point 1
le respect de l'ordre c'est ceci :

"ENCODAGE" "DEMANDES INTRODUITES"
A13 = A2 et le suivant A3 et ainsi de suite
B13 = B2 B3
E13 = C2 C3
B8 = D2 D3
E8 = E2 E3
F8 = F2 F3
D30 = G2 G3
D31 = H2 H3
D33 = I2 I3
D35 = J2 J3
G39 = K2 K3

"ENCODAGE" me sert à obtenir et calculer tous les renseignements qui doivent
êtres enregistrés sur "DEMANDES INTRODUITES" pour chaque individus.

voila merci beaucoup
@+
Pascal


Voici qui devrait faire le point 1. Toujours la même remarque sur les
coupures de lignes ..

Sub test()
'feuille de départ
feu_dep = "encodage"
'feuille d'arrivée
feu_arr = "demandes introduites"

'plage des *cellules* d'entrée, dans l'ordre
arr_dep = Array("A13", "B13", "E13", "B8", "E8", "F8", "D30", "D31",
"D33", "D35", "G39")

'plage des *colonnes* d'arrivée, dans l'ordre
arr_arr = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K")

'vérification du nombre d'éléments
If UBound(arr_dep) <> UBound(arr_arr) Then
MsgBox "Erreur dans le nombre d'éléments": Exit Sub
End If

'trouver la dernière ligne de la feuille d'arrivée
With Sheets(feu_arr)
On Error Resume Next
Lx = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
If Err > 0 Then Err.Clear: Lx = 0
On Error GoTo 0

'faire la copie
For a = 0 To UBound(arr_dep)
Sheets(feu_arr).Range(arr_arr(a) & Lx + 1) =
Sheets(feu_dep).Range(arr_dep(a))
Next a
End With
End Sub

Si tu as des données personnelles sur tes "individus" et que tu sois en
France, n'oublies pas de déclarer le fichier à la CNIL.

@+
FxM

Avatar
pascal B
cher FxM,

Q1:
voici ce que j'ai fait comme tu me l'as dit cela fonctionne mais il me le
place systématiquement sur la ligne 56 en A. Ai je fait une erreur ?
Sub Transfert()
'feuille de départ
feu_dep = "ENCODAGE"
'feuille d'arrivée
feu_arr = "Demandes introduites"

'plage des *cellules* d'entrée, dans l'ordre
arr_dep = Array("A13", "B13", "E13", "B8", "E8", "F8", "D30", "D31",
"D33", "D35", "G39", "G16")

'plage des *colonnes* d'arrivée, dans l'ordre
arr_arr = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
"L")

'vérification du nombre d'éléments
If UBound(arr_dep) <> UBound(arr_arr) Then
MsgBox "Erreur dans le nombre d'éléments": Exit Sub
End If

'trouver la dernière ligne de la feuille d'arrivée
With Sheets(feu_arr)
On Error Resume Next
Lx = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
If Err > 0 Then Err.Clear: Lx = 0
On Error GoTo 0

'faire la copie
For a = 0 To UBound(arr_dep)
Sheets(feu_arr).Range(arr_arr(a) & Lx + 1) =
Sheets(feu_dep).Range(arr_dep(a))
Next a
End With
End Sub

Q2 : elle fonctionne mais fait l'inverse c'est à dire qu'elle copie ceux
pour qui la colonne M est vide et laisse les autres. je suis trop nul pour
trouver ou est le pb si tu veux bien encore m'aider ?

voici la macro :
Sub Enregistrement_accord()
'feuille de départ
feu_dep = "Demandes introduites"
'feuille d'arrivée
feu_arr = "Demandes acceptées"
'colonne à vérifier
colonne = "M"

'avec la feuille de départ
With Sheets(feu_dep)
'l'activer
.Activate
'chercher la dernière ligne et la dernière colonne
Lx = .Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
Cx = .Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
'pour vérifier qu'il y a bien concordance avec la colonne
'à vérifier
plagetout = .Range(.Cells(1, 1), .Cells(Lx, Cx)).Address
col1 = .Range(colonne & ":" & colonne).Address
Set check = Application.Intersect(Range(plagetout), Range(col1))
If check Is Nothing Then MsgBox "Zone incompatibles": Exit Sub

'parcourir toutes les lignes ) partir de la fin
For lig = Lx To 1 Step -1
'si la cellule est vide
If IsEmpty(.Cells(lig, colonne)) Then
'couper
.Rows(lig & ":" & lig).Cut
'aller sur la feuille d'arivée
Sheets(feu_arr).Activate
'chercher la dernière ligne
On Error Resume Next
lig2 = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
col2 = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
If Err > 0 Then Err.Clear: lig2 = 0
On Error GoTo 0
'coller
Range("A" & lig2 + 1).Select
ActiveSheet.Paste
'retourner sur la feuille de départ
.Activate
End If
Next lig
End With
End Sub

encore merci pour le temps que tu me consacre

@+
Avatar
FxM
Pour la Q1), je soupçonne avoir oublié un '.' (ma grande spécialité de
ne pas tester sur les deux feuilles actives)

Si tu as 55 lignes dans la feuille "encodage", teste ceci :
ajoute un point devant cells.find(etc, ..). Cecui te donne :
Lx = .Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row


S'il n'y a rien de confidentiel, et que cela ne marche pas, tu peux
mettre une copie de ton classeur ici : http://cerbermail.com/?XvGWuMta7j




Pour Q2), la solution est simple :

Il suffit de remplacer :
If IsEmpty(.Cells(lig, colonne)) Then


par :
If NOT IsEmpty(.Cells(lig, colonne)) Then
donc si la cellule n'est PAS vide ...


@+
FxM








cher FxM,

Q1:
voici ce que j'ai fait comme tu me l'as dit cela fonctionne mais il me le
place systématiquement sur la ligne 56 en A. Ai je fait une erreur ?
Sub Transfert()
'feuille de départ
feu_dep = "ENCODAGE"
'feuille d'arrivée
feu_arr = "Demandes introduites"

'plage des *cellules* d'entrée, dans l'ordre
arr_dep = Array("A13", "B13", "E13", "B8", "E8", "F8", "D30", "D31",
"D33", "D35", "G39", "G16")

'plage des *colonnes* d'arrivée, dans l'ordre
arr_arr = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
"L")

'vérification du nombre d'éléments
If UBound(arr_dep) <> UBound(arr_arr) Then
MsgBox "Erreur dans le nombre d'éléments": Exit Sub
End If

'trouver la dernière ligne de la feuille d'arrivée
With Sheets(feu_arr)
On Error Resume Next
Lx = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
If Err > 0 Then Err.Clear: Lx = 0
On Error GoTo 0

'faire la copie
For a = 0 To UBound(arr_dep)
Sheets(feu_arr).Range(arr_arr(a) & Lx + 1) =
Sheets(feu_dep).Range(arr_dep(a))
Next a
End With
End Sub

Q2 : elle fonctionne mais fait l'inverse c'est à dire qu'elle copie ceux
pour qui la colonne M est vide et laisse les autres. je suis trop nul pour
trouver ou est le pb si tu veux bien encore m'aider ?

voici la macro :
Sub Enregistrement_accord()
'feuille de départ
feu_dep = "Demandes introduites"
'feuille d'arrivée
feu_arr = "Demandes acceptées"
'colonne à vérifier
colonne = "M"

'avec la feuille de départ
With Sheets(feu_dep)
'l'activer
.Activate
'chercher la dernière ligne et la dernière colonne
Lx = .Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
Cx = .Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
'pour vérifier qu'il y a bien concordance avec la colonne
'à vérifier
plagetout = .Range(.Cells(1, 1), .Cells(Lx, Cx)).Address
col1 = .Range(colonne & ":" & colonne).Address
Set check = Application.Intersect(Range(plagetout), Range(col1))
If check Is Nothing Then MsgBox "Zone incompatibles": Exit Sub

'parcourir toutes les lignes ) partir de la fin
For lig = Lx To 1 Step -1
'si la cellule est vide
If IsEmpty(.Cells(lig, colonne)) Then
'couper
.Rows(lig & ":" & lig).Cut
'aller sur la feuille d'arivée
Sheets(feu_arr).Activate
'chercher la dernière ligne
On Error Resume Next
lig2 = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
col2 = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
If Err > 0 Then Err.Clear: lig2 = 0
On Error GoTo 0
'coller
Range("A" & lig2 + 1).Select
ActiveSheet.Paste
'retourner sur la feuille de départ
.Activate
End If
Next lig
End With
End Sub

encore merci pour le temps que tu me consacre

@+




1 2