OVH Cloud OVH Cloud

Amélioraion de code

4 réponses
Avatar
Jipé
Bonjour le Forum,

le code ci-dessous, associé à un bouton, me permet de copier des données
dans un classeur nommé "Recap".

Problème: Si je clique 2 fois sur le bouton, j'aurai 2 fois les mêmes
données copiées.

Est-il possible, que soit faite une vérification des données (dans le
classeur "Recap"), avant d'effectuer la copie?

Sub zaza()
Dim Critere As String
Critere = "TENNIS DE TABLE"

Application.ScreenUpdating = False
Set tbl = Range("A5").CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, tbl.Columns.Count).Select
Selection.Copy
Range("A6").Select

On Error Resume Next
Workbooks("Recap.xls").Activate
If Err <> 0 Then
Err = 0
fichier = "C:\Documents and
Settings\Jipé.JIPE\Bureau\Omnisport\Recap.xls"
Workbooks.Open Filename:=fichier

If Err <> 0 Then
MsgBox "Le fichier '" & fichier & "' est introuvable"
Exit Sub
End If
End If

Workbooks("Recap.xls").Worksheets("Detail").Activate

x = ActiveSheet.UsedRange.Rows.Count
For Z = (x + 6) To 6 Step -1
If Cells(Z, 1) = Critere Then Rows(Z).Delete Shift:=xlUp
Next Z

[A65536].End(xlUp)(2).Activate

ActiveSheet.Paste

Y = ActiveSheet.UsedRange.Rows.Count
Range("A6:S" & Y + 4).Select
Selection.Sort Key1:=Range("B6"), Order1:=xlAscending,
Key2:=Range("C6"), Order2:=xlAscending, header:=xlGuess, OrderCustom:=1
Range("A6").Select

ActiveWorkbook.Save
ActiveWorkbook.Close

End Sub

Merci pour votre aide.

Jipé

4 réponses

Avatar
Chris MICHEL
Bonjour,

je suis pas sûr de bien comprendre: ton code contient un
passage disant de vérifier chaque ligne et d'effacer
toutes celles correspondant au critère défini au début
("Tennis de table") avant de coller les nouvelles données.

Je ne comprends donc pas bien quel autre test tu veux
faire avant de coller. moins que tu utilises cette macro
pour coller des données correspondant à d'autres critères
que "tennis de table".

Il faudrait (à moins qu'un contributeur plus malin que moi
n'ait résolu le Pb) que tu précises un peu plus à quoi
sert le fichier et dans quelles conditions tu voudrais que
les données ne soient pas collées.

Chris.


-----Message d'origine-----
Bonjour le Forum,

le code ci-dessous, associé à un bouton, me permet de
copier des données

dans un classeur nommé "Recap".

Problème: Si je clique 2 fois sur le bouton, j'aurai 2
fois les mêmes

données copiées.

Est-il possible, que soit faite une vérification des
données (dans le

classeur "Recap"), avant d'effectuer la copie?

Sub zaza()
Dim Critere As String
Critere = "TENNIS DE TABLE"

Application.ScreenUpdating = False
Set tbl = Range("A5").CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1,
tbl.Columns.Count).Select

Selection.Copy
Range("A6").Select

On Error Resume Next
Workbooks("Recap.xls").Activate
If Err <> 0 Then
Err = 0
fichier = "C:Documents and
SettingsJipé.JIPEBureauOmnisportRecap.xls"
Workbooks.Open Filename:=fichier

If Err <> 0 Then
MsgBox "Le fichier '" & fichier & "' est
introuvable"

Exit Sub
End If
End If

Workbooks("Recap.xls").Worksheets("Detail").Activate

x = ActiveSheet.UsedRange.Rows.Count
For Z = (x + 6) To 6 Step -1
If Cells(Z, 1) = Critere Then Rows(Z).Delete
Shift:=xlUp

Next Z

[A65536].End(xlUp)(2).Activate

ActiveSheet.Paste

Y = ActiveSheet.UsedRange.Rows.Count
Range("A6:S" & Y + 4).Select
Selection.Sort Key1:=Range("B6"), Order1:=xlAscending,
Key2:=Range("C6"), Order2:=xlAscending, header:=xlGuess,
OrderCustom:=1

Range("A6").Select

ActiveWorkbook.Save
ActiveWorkbook.Close

End Sub

Merci pour votre aide.

Jipé


.



Avatar
Jipé
Re bonjour,

pour suivre Chris qui dit: "ton code contient un
passage disant de vérifier chaque ligne et d'effacer
toutes celles correspondant au critère défini au début
("Tennis de table") avant de coller les nouvelles données."

J'ai bien vu cette partie du code, mais cela ne semble pas fonctionner
correctement.

Infos sup:

---J'ai 12 fichiers genre "Basket.xls", "Football.xls", "Tennis de
table.xls" etc.....
---Dans chacun de ces fichiers, j'ai créé un bouton de sauvegarde auquel est
associé le code "Sub zaza".
J'ai donc pour la section "Tennis de table": Dim Critere As String

Critere = "TENNIS DE TABLE"
pour la section "Football": Dim Critere As

String

Critere = "FOOTBALL"
pour la section "Basket": Dim Critere As

String

Critere = "BASKET"
etc..............................

---C'est moi qui gère le fichier "Recap.xls", et je travaille de la façon
suivante.
-Le responsable de la section Basket me donne son fichier "Basket.xls".
J'ouvre ce dernier, clique sur le bouton de sauvegarde et récupère ainsi le
fichier du Basket.
-Le responsable de la section Tennis de table me donne son fichier
"Tennis de table .xls". J'ouvre ce dernier, clique sur le bouton de
sauvegarde et récupère ainsi le fichier du Tennis de table.
-etc....................
---Le problème survient quelques jours plus tard lorsque je souhaite faire
la mise à jour d'une section déjà enregistrée. Je me retrouve avec des
doublons. Comme si le code ne tenait pas compte de la 1ère copie.

N'étant pas programmeur, j'adapte des codes à mes besoins (avec + ou - de
réussite). Ai-je supprimé quelque chose dans ce code, qui l'empêche de
tourner rond?

En espérant ne pas vous avoir embrouillé.

Merci

Jipé

"Chris MICHEL" a écrit dans le message
de news:950e01c3ea52$721f5620$
Bonjour,

je suis pas sûr de bien comprendre: ton code contient un
passage disant de vérifier chaque ligne et d'effacer
toutes celles correspondant au critère défini au début
("Tennis de table") avant de coller les nouvelles données.

Je ne comprends donc pas bien quel autre test tu veux
faire avant de coller. moins que tu utilises cette macro
pour coller des données correspondant à d'autres critères
que "tennis de table".

Il faudrait (à moins qu'un contributeur plus malin que moi
n'ait résolu le Pb) que tu précises un peu plus à quoi
sert le fichier et dans quelles conditions tu voudrais que
les données ne soient pas collées.

Chris.


-----Message d'origine-----
Bonjour le Forum,

le code ci-dessous, associé à un bouton, me permet de
copier des données

dans un classeur nommé "Recap".

Problème: Si je clique 2 fois sur le bouton, j'aurai 2
fois les mêmes

données copiées.

Est-il possible, que soit faite une vérification des
données (dans le

classeur "Recap"), avant d'effectuer la copie?

Sub zaza()
Dim Critere As String
Critere = "TENNIS DE TABLE"

Application.ScreenUpdating = False
Set tbl = Range("A5").CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1,
tbl.Columns.Count).Select

Selection.Copy
Range("A6").Select

On Error Resume Next
Workbooks("Recap.xls").Activate
If Err <> 0 Then
Err = 0
fichier = "C:Documents and
SettingsJipé.JIPEBureauOmnisportRecap.xls"
Workbooks.Open Filename:=fichier

If Err <> 0 Then
MsgBox "Le fichier '" & fichier & "' est
introuvable"

Exit Sub
End If
End If

Workbooks("Recap.xls").Worksheets("Detail").Activate

x = ActiveSheet.UsedRange.Rows.Count
For Z = (x + 6) To 6 Step -1
If Cells(Z, 1) = Critere Then Rows(Z).Delete
Shift:=xlUp

Next Z

[A65536].End(xlUp)(2).Activate

ActiveSheet.Paste

Y = ActiveSheet.UsedRange.Rows.Count
Range("A6:S" & Y + 4).Select
Selection.Sort Key1:=Range("B6"), Order1:=xlAscending,
Key2:=Range("C6"), Order2:=xlAscending, header:=xlGuess,
OrderCustom:=1

Range("A6").Select

ActiveWorkbook.Save
ActiveWorkbook.Close

End Sub

Merci pour votre aide.

Jipé


.



Avatar
Chris MICHEL
OK,

à vue de nez je vois deux possibilités: soit le test ne
s'applique pas sur la bonne colonne, soit l'orthographe ne
correspond pas exactement au critère.

Les questions à poser sont donc: dans le fichier tennis de
table.xls, la colonne A est-elle une colonne contenant
uniformément le même texte "tennis de table"? Est-ce
orthographié strictement pareil qu dans ton critère?

De toute manière, je te conseille de changer ta ligne

Critere = "TENNIS DE TABLE"

par

Critere = [A2]

ça rendra ton code plus souple.

A part ça, je vois pas, le code me semble tout à fait
juste. Je nepeux rien dire de plus, sinon que tu devrais
mettre des stops dans ton code (en cliquant dans la marge)
et afficher la fenètre espoins pour voir comment évolue
tes variables au cour de l'éxécution.

Tiens-moi au courant,

Chris.
-----Message d'origine-----
Re bonjour,

pour suivre Chris qui dit: "ton code contient un
passage disant de vérifier chaque ligne et d'effacer
toutes celles correspondant au critère défini au début
("Tennis de table") avant de coller les nouvelles
données."


J'ai bien vu cette partie du code, mais cela ne semble
pas fonctionner

correctement.

Infos sup:

---J'ai 12 fichiers
genre "Basket.xls", "Football.xls", "Tennis de

table.xls" etc.....
---Dans chacun de ces fichiers, j'ai créé un bouton de
sauvegarde auquel est

associé le code "Sub zaza".
J'ai donc pour la section "Tennis de table": Dim
Critere As String


Critere = "TENNIS DE TABLE"
pour la

section "Football": Dim

Critere As
String

Critere = "FOOTBALL"
pour la

section "Basket": Dim

Critere As
String

Critere = "BASKET"
etc..............................

---C'est moi qui gère le fichier "Recap.xls", et je
travaille de la façon

suivante.
-Le responsable de la section Basket me donne son
fichier "Basket.xls".

J'ouvre ce dernier, clique sur le bouton de sauvegarde et
récupère ainsi le

fichier du Basket.
-Le responsable de la section Tennis de table me
donne son fichier

"Tennis de table .xls". J'ouvre ce dernier, clique sur le
bouton de

sauvegarde et récupère ainsi le fichier du Tennis de
table.

-etc....................
---Le problème survient quelques jours plus tard lorsque
je souhaite faire

la mise à jour d'une section déjà enregistrée. Je me
retrouve avec des

doublons. Comme si le code ne tenait pas compte de la
1ère copie.


N'étant pas programmeur, j'adapte des codes à mes besoins
(avec + ou - de

réussite). Ai-je supprimé quelque chose dans ce code, qui
l'empêche de

tourner rond?

En espérant ne pas vous avoir embrouillé.

Merci

Jipé

"Chris MICHEL" a
écrit dans le message

de news:950e01c3ea52$721f5620$
Bonjour,

je suis pas sûr de bien comprendre: ton code contient un
passage disant de vérifier chaque ligne et d'effacer
toutes celles correspondant au critère défini au début
("Tennis de table") avant de coller les nouvelles données.

Je ne comprends donc pas bien quel autre test tu veux
faire avant de coller. moins que tu utilises cette macro
pour coller des données correspondant à d'autres critères
que "tennis de table".

Il faudrait (à moins qu'un contributeur plus malin que moi
n'ait résolu le Pb) que tu précises un peu plus à quoi
sert le fichier et dans quelles conditions tu voudrais que
les données ne soient pas collées.

Chris.


-----Message d'origine-----
Bonjour le Forum,

le code ci-dessous, associé à un bouton, me permet de
copier des données

dans un classeur nommé "Recap".

Problème: Si je clique 2 fois sur le bouton, j'aurai 2
fois les mêmes

données copiées.

Est-il possible, que soit faite une vérification des
données (dans le

classeur "Recap"), avant d'effectuer la copie?

Sub zaza()
Dim Critere As String
Critere = "TENNIS DE TABLE"

Application.ScreenUpdating = False
Set tbl = Range("A5").CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1,
tbl.Columns.Count).Select

Selection.Copy
Range("A6").Select

On Error Resume Next
Workbooks("Recap.xls").Activate
If Err <> 0 Then
Err = 0
fichier = "C:Documents and
SettingsJipé.JIPEBureauOmnisportRecap.xls"
Workbooks.Open Filename:=fichier

If Err <> 0 Then
MsgBox "Le fichier '" & fichier & "' est
introuvable"

Exit Sub
End If
End If

Workbooks("Recap.xls").Worksheets("Detail").Activate

x = ActiveSheet.UsedRange.Rows.Count
For Z = (x + 6) To 6 Step -1
If Cells(Z, 1) = Critere Then Rows(Z).Delete
Shift:=xlUp

Next Z

[A65536].End(xlUp)(2).Activate

ActiveSheet.Paste

Y = ActiveSheet.UsedRange.Rows.Count
Range("A6:S" & Y + 4).Select
Selection.Sort Key1:=Range("B6"),
Order1:=xlAscending,


Key2:=Range("C6"), Order2:=xlAscending, header:=xlGuess,
OrderCustom:=1

Range("A6").Select

ActiveWorkbook.Save
ActiveWorkbook.Close

End Sub

Merci pour votre aide.

Jipé


.




.




Avatar
Jipé
Bonjour Chris, bonjour le Forum,

J'ai effectué la modif (Critere = "TENNIS DE TABLE") par (Critere = [A6]).
Pas de souci.

En ce qui concerne les Stops (Espions), si j'ai bien utilisé cette fonction
(c'était la 1ère fois, et je ne suis sûr de rien), le code bloque à la ligne
[A65536].End(xlUp)(2).Activate.

Je me suis rendu compte que, pour que tout se passe bien, il faut cliquer 2
fois sur le bouton "Sauvegarde".

La 1ère fois le code supprime toute les lignes de la section dans Recap.xls.
La seconde fois, le code copie les données et fait le tri alphabétique.

Voilà où j'en suis.
Merci encore.
Jipé

"Chris MICHEL" a écrit dans le message
de news:947e01c3eaf6$789a2c10$
OK,

à vue de nez je vois deux possibilités: soit le test ne
s'applique pas sur la bonne colonne, soit l'orthographe ne
correspond pas exactement au critère.

Les questions à poser sont donc: dans le fichier tennis de
table.xls, la colonne A est-elle une colonne contenant
uniformément le même texte "tennis de table"? Est-ce
orthographié strictement pareil qu dans ton critère?

De toute manière, je te conseille de changer ta ligne

Critere = "TENNIS DE TABLE"

par

Critere = [A2]

ça rendra ton code plus souple.

A part ça, je vois pas, le code me semble tout à fait
juste. Je nepeux rien dire de plus, sinon que tu devrais
mettre des stops dans ton code (en cliquant dans la marge)
et afficher la fenètre espoins pour voir comment évolue
tes variables au cour de l'éxécution.

Tiens-moi au courant,

Chris.
-----Message d'origine-----
Re bonjour,

pour suivre Chris qui dit: "ton code contient un
passage disant de vérifier chaque ligne et d'effacer
toutes celles correspondant au critère défini au début
("Tennis de table") avant de coller les nouvelles
données."


J'ai bien vu cette partie du code, mais cela ne semble
pas fonctionner

correctement.

Infos sup:

---J'ai 12 fichiers
genre "Basket.xls", "Football.xls", "Tennis de

table.xls" etc.....
---Dans chacun de ces fichiers, j'ai créé un bouton de
sauvegarde auquel est

associé le code "Sub zaza".
J'ai donc pour la section "Tennis de table": Dim
Critere As String


Critere = "TENNIS DE TABLE"
pour la

section "Football": Dim

Critere As
String

Critere = "FOOTBALL"
pour la

section "Basket": Dim

Critere As
String

Critere = "BASKET"
etc..............................

---C'est moi qui gère le fichier "Recap.xls", et je
travaille de la façon

suivante.
-Le responsable de la section Basket me donne son
fichier "Basket.xls".

J'ouvre ce dernier, clique sur le bouton de sauvegarde et
récupère ainsi le

fichier du Basket.
-Le responsable de la section Tennis de table me
donne son fichier

"Tennis de table .xls". J'ouvre ce dernier, clique sur le
bouton de

sauvegarde et récupère ainsi le fichier du Tennis de
table.

-etc....................
---Le problème survient quelques jours plus tard lorsque
je souhaite faire

la mise à jour d'une section déjà enregistrée. Je me
retrouve avec des

doublons. Comme si le code ne tenait pas compte de la
1ère copie.


N'étant pas programmeur, j'adapte des codes à mes besoins
(avec + ou - de

réussite). Ai-je supprimé quelque chose dans ce code, qui
l'empêche de

tourner rond?

En espérant ne pas vous avoir embrouillé.

Merci

Jipé

"Chris MICHEL" a
écrit dans le message

de news:950e01c3ea52$721f5620$
Bonjour,

je suis pas sûr de bien comprendre: ton code contient un
passage disant de vérifier chaque ligne et d'effacer
toutes celles correspondant au critère défini au début
("Tennis de table") avant de coller les nouvelles données.

Je ne comprends donc pas bien quel autre test tu veux
faire avant de coller. moins que tu utilises cette macro
pour coller des données correspondant à d'autres critères
que "tennis de table".

Il faudrait (à moins qu'un contributeur plus malin que moi
n'ait résolu le Pb) que tu précises un peu plus à quoi
sert le fichier et dans quelles conditions tu voudrais que
les données ne soient pas collées.

Chris.


-----Message d'origine-----
Bonjour le Forum,

le code ci-dessous, associé à un bouton, me permet de
copier des données

dans un classeur nommé "Recap".

Problème: Si je clique 2 fois sur le bouton, j'aurai 2
fois les mêmes

données copiées.

Est-il possible, que soit faite une vérification des
données (dans le

classeur "Recap"), avant d'effectuer la copie?

Sub zaza()
Dim Critere As String
Critere = "TENNIS DE TABLE"

Application.ScreenUpdating = False
Set tbl = Range("A5").CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1,
tbl.Columns.Count).Select

Selection.Copy
Range("A6").Select

On Error Resume Next
Workbooks("Recap.xls").Activate
If Err <> 0 Then
Err = 0
fichier = "C:Documents and
SettingsJipé.JIPEBureauOmnisportRecap.xls"
Workbooks.Open Filename:=fichier

If Err <> 0 Then
MsgBox "Le fichier '" & fichier & "' est
introuvable"

Exit Sub
End If
End If

Workbooks("Recap.xls").Worksheets("Detail").Activate

x = ActiveSheet.UsedRange.Rows.Count
For Z = (x + 6) To 6 Step -1
If Cells(Z, 1) = Critere Then Rows(Z).Delete
Shift:=xlUp

Next Z

[A65536].End(xlUp)(2).Activate

ActiveSheet.Paste

Y = ActiveSheet.UsedRange.Rows.Count
Range("A6:S" & Y + 4).Select
Selection.Sort Key1:=Range("B6"),
Order1:=xlAscending,


Key2:=Range("C6"), Order2:=xlAscending, header:=xlGuess,
OrderCustom:=1

Range("A6").Select

ActiveWorkbook.Save
ActiveWorkbook.Close

End Sub

Merci pour votre aide.

Jipé


.




.