OVH Cloud OVH Cloud

Tester les cellules non vides d'un tableau

31 réponses
Avatar
jpthillard
Bonjour,

Je voudrais tester le contenu d'une plage de cellules dans un tableau
et r=E9cup=E9rer des informations de deux cellules (date et nom). J'ai
tent=E9 de le faire avec une fonction recherchev. Je vois bien qu'elle
est inappropri=E9e. Comment puis-je faire ?
En PJ un fichier exemple: http://cjoint.com/?fnlVFGkWkM
Merci d'avance

JP

10 réponses

1 2 3 4
Avatar
FFO
Salut lSteph
Et merci pour ton aide

j'ai regardais avec intêret tes remarques concernant mon code un peu plus
light
c'est grâce à 2 boucles imbriquées l'une dans l'autre que j'ai pu l'allèger
et de m'affranchir en plus de la position des matières dans l'onglet de
recopie ce qui évite de gérer les cellules de destination
Double avantage
Mais tu sembles dire que des améliorations potentielles de plusieurs natures
seraient envisageables
Peux tu sur la base de ce que j'ai proposé et ce ligne par ligne (ce que
j'ai proposé avec ta suggestion) m'apporter les corrections qui permettraient
d'améliorer la performance avec les explications en correspondances
Et ainsi grâce à toi de m'améliorer
Je demande toujours à apprendre
Merci d'avance de me consacrer un peu de ton temps


Bonjour FFO,

;-)
Uniquement à toutes fins utiles et si je puis permettre:
Une Macro encore plus light :
tu peux aussi tout à fait éviter les .select

(en revanche déclarer ses variables est un choix qui ne demande guère
qu'une ou deux lignes de plus )

Ceci serait à vérifier (remplace Avril par Mai par exemple)....:
Elle ne nécessite que l'actualisation de
("C3", "Y19")
de la ligne :
For Each c In Worksheets(Nom).Range("C3", "Y19")

Pour choisir la bonne zone à traiter en fonction du mois (Avril sur cette
ligne)


....me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) > > c.Offset(-((c.Row) - 2), 0)


- - -
Sinon, pour le type de connexion je te comprends, lorsque je ne suis
pas chez moi , j'ai le même pb que toi , j'utilise l'interface de
google qui est qdmême un peu mieux pour s'y retrouver dans les fils
que cdo.

Amicordialement.

lSteph







Avatar
lSteph
Bonjour,

Si tu relis mon message c'est précisé:

Les .select sont presque toujours inutiles et ralentissent
l'execution
les déclarations typées de variables en revanche sont de nature à
l'optimiser.

Pour savoir ce qui plante dans ton code lorsqu'on change de mois, (je
n'ai pas eu de mal puisque c'est ce qui me posait difficulté dans ma
première proposition) je t'ai indiqué à quel endroit.

Si tu veux un code complet, vois celui de l'exemple que j'ai proposé
hier en fin d'après midi.
Plus de recherche de colonne, on la crée en fonction des feuilles
insérées au classeur lorsque la macro est déclanchée par validation du
mois dans la cellule [b1]

Tu peux peut-être y intégrer les autres améliorations que tu
envisages.

@+

Cordialement.

lSteph





On 15 mai, 10:27, FFO wrote:
Salut lSteph
Et merci pour ton aide

j'ai regardais avec intêret tes remarques concernant mon code un peu pl us
light
c'est grâce à 2 boucles imbriquées l'une dans l'autre que j'ai pu l 'allèger
et de m'affranchir en plus de la position des matières dans l'onglet de
recopie ce qui évite de gérer les cellules de destination
Double avantage
Mais tu sembles dire que des améliorations potentielles de plusieurs na tures
seraient envisageables
Peux tu sur la base de ce que j'ai proposé et ce ligne par ligne (ce que
j'ai proposé avec ta suggestion) m'apporter les corrections qui permett raient
d'améliorer la performance avec les explications en correspondances
Et ainsi grâce à toi de m'améliorer
Je demande toujours à apprendre
Merci d'avance de me consacrer un peu de ton temps


Bonjour FFO,

;-)
Uniquement à toutes fins utiles et si je puis permettre:
Une Macro encore plus light :
tu peux aussi tout à fait éviter les .select

(en revanche déclarer ses variables est un choix qui ne demande guè re
qu'une ou deux lignes de plus )

Ceci serait à vérifier (remplace Avril par Mai par exemple)....:
Elle ne nécessite que l'actualisation de
("C3", "Y19")
de la ligne :
For Each c In Worksheets(Nom).Range("C3", "Y19")

Pour choisir la bonne zone à traiter en fonction du mois (Avril sur cette
ligne)


....me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) =
c.Offset(-((c.Row) - 2), 0)


- - -
Sinon, pour le type de connexion je te comprends, lorsque je ne suis
pas chez moi , j'ai le même pb que toi , j'utilise l'interface de
google qui est qdmême un peu mieux pour s'y retrouver dans les fils
que cdo.

Amicordialement.

lSteph





Avatar
lSteph
..cela fait penser que pour une version avec toutes les feuilles, il
ne sera pas inutile d'ajouter au début un
application.screenupdating = False

...

lSteph

On 15 mai, 11:10, lSteph wrote:
Bonjour,

Si tu relis mon message c'est précisé:

Les .select sont presque toujours inutiles et ralentissent
l'execution
les déclarations typées de variables en revanche sont de nature à
l'optimiser.

Pour savoir ce qui plante dans ton code lorsqu'on change de mois, (je
n'ai pas eu de mal puisque c'est ce qui me posait difficulté dans ma
première proposition) je t'ai indiqué à quel endroit.

Si tu veux un code complet, vois celui de l'exemple que j'ai proposé
hier en fin d'après midi.
Plus de recherche de colonne, on la crée en fonction des feuilles
insérées au classeur lorsque la macro est déclanchée par validati on du
mois dans la cellule [b1]

Tu peux peut-être y intégrer les autres améliorations que tu
envisages.

@+

Cordialement.

lSteph

On 15 mai, 10:27, FFO wrote:

Salut lSteph
Et merci pour ton aide

j'ai regardais avec intêret tes remarques concernant mon code un peu plus
light
c'est grâce à 2 boucles imbriquées l'une dans l'autre que j'ai pu l'allèger
et de m'affranchir en plus de la position des matières dans l'onglet de
recopie ce qui évite de gérer les cellules de destination
Double avantage
Mais tu sembles dire que des améliorations potentielles de plusieurs natures
seraient envisageables
Peux tu sur la base de ce que j'ai proposé et ce ligne par ligne (ce que
j'ai proposé avec ta suggestion) m'apporter les corrections qui perme ttraient
d'améliorer la performance avec les explications en correspondances
Et ainsi grâce à toi de m'améliorer
Je demande toujours à apprendre
Merci d'avance de me consacrer un peu de ton temps



Bonjour FFO,

;-)
Uniquement à toutes fins utiles et si je puis permettre:
Une Macro encore plus light :
tu peux aussi tout à fait éviter les .select

(en revanche déclarer ses variables est un choix qui ne demande gu ère
qu'une ou deux lignes de plus )

Ceci serait à vérifier (remplace Avril par Mai par exemple)....:
Elle ne nécessite que l'actualisation de
("C3", "Y19")
de la ligne :
For Each c In Worksheets(Nom).Range("C3", "Y19")

Pour choisir la bonne zone à traiter en fonction du mois (Avril s ur cette
ligne)


....me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) =
c.Offset(-((c.Row) - 2), 0)


- - -
Sinon, pour le type de connexion je te comprends, lorsque je ne suis
pas chez moi , j'ai le même pb que toi , j'utilise l'interface de
google qui est qdmême un peu mieux pour s'y retrouver dans les fils
que cdo.

Amicordialement.

lSteph







Avatar
FFO
Au de là de ta remarque sur les .select c'est la manière de les éluder qui
m'interesse
Ils sont au nombre de 4 :

Sheets("Analyse des incriptions aux CCF").Select
Rows("1:1").Select
Selection.Find(What:=Nom, After:¬tiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate

Comment éviter les Sheets("Analyse des incriptions aux CCF").Select et
Rows("1:1").Select et faire en sorte que l'instruction qui suit puisse
fonctionner sans que son résultat soit altéré

Sheets(I).Select
For Each c In Worksheets(Nom).Range("C3", "Y19")
If c <> "" Then
Sheets("Analyse des incriptions aux CCF").Select
For Each D In Worksheets("Analyse des incriptions aux CCF").Range([B2],
[B65535].End(xlUp))

De même pour ces 2 .Select trés important pour un fonctionnement correct des
2 boucles

Je suis preneur de tes solutions

Si je n'ai pas intégré dans la Macro le traitement de tous les Mois donnant
à l'utilisateur le soin de le réaliser par le changement de la zone de
selection qui le conditionne, c'est que si tu analyses bien la problématique
chaque zone est tributaire du nombre de semaines donc du nombre de colonnes
qui peut entrainer le nombre de lignes (5 Semaines pour un seul et même Mois,
jusqu'à la colonne Z maximum du tableau il ne loge que 4 semaines)
Compte tenu de cet aléa difficilement gérable par des instructions j'ai
préféré le laisser en traitement manuel
De plus si seuls quelques mois sont à traiter une Macro par mois avec la
zone appropriée et le tour est joué

Tu sembles dire que mon code plante je l'ai testé pour le mois d'Avril avec
succés
Où ne fonctionnerait il pas pour toi ????

Voilà donc toutes ces questions
Merci de tes réponses


Bonjour,

Si tu relis mon message c'est précisé:

Les .select sont presque toujours inutiles et ralentissent
l'execution
les déclarations typées de variables en revanche sont de nature à
l'optimiser.

Pour savoir ce qui plante dans ton code lorsqu'on change de mois, (je
n'ai pas eu de mal puisque c'est ce qui me posait difficulté dans ma
première proposition) je t'ai indiqué à quel endroit.

Si tu veux un code complet, vois celui de l'exemple que j'ai proposé
hier en fin d'après midi.
Plus de recherche de colonne, on la crée en fonction des feuilles
insérées au classeur lorsque la macro est déclanchée par validation du
mois dans la cellule [b1]

Tu peux peut-être y intégrer les autres améliorations que tu
envisages.

@+

Cordialement.

lSteph





On 15 mai, 10:27, FFO wrote:
Salut lSteph
Et merci pour ton aide

j'ai regardais avec intêret tes remarques concernant mon code un peu plus
light
c'est grâce à 2 boucles imbriquées l'une dans l'autre que j'ai pu l'allèger
et de m'affranchir en plus de la position des matières dans l'onglet de
recopie ce qui évite de gérer les cellules de destination
Double avantage
Mais tu sembles dire que des améliorations potentielles de plusieurs natures
seraient envisageables
Peux tu sur la base de ce que j'ai proposé et ce ligne par ligne (ce que
j'ai proposé avec ta suggestion) m'apporter les corrections qui permettraient
d'améliorer la performance avec les explications en correspondances
Et ainsi grâce à toi de m'améliorer
Je demande toujours à apprendre
Merci d'avance de me consacrer un peu de ton temps


Bonjour FFO,

;-)
Uniquement à toutes fins utiles et si je puis permettre:
Une Macro encore plus light :
tu peux aussi tout à fait éviter les .select

(en revanche déclarer ses variables est un choix qui ne demande guère
qu'une ou deux lignes de plus )

Ceci serait à vérifier (remplace Avril par Mai par exemple)....:
Elle ne nécessite que l'actualisation de
("C3", "Y19")
de la ligne :
For Each c In Worksheets(Nom).Range("C3", "Y19")

Pour choisir la bonne zone à traiter en fonction du mois (Avril sur cette
ligne)


....me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) > > > > c.Offset(-((c.Row) - 2), 0)


- - -
Sinon, pour le type de connexion je te comprends, lorsque je ne suis
pas chez moi , j'ai le même pb que toi , j'utilise l'interface de
google qui est qdmême un peu mieux pour s'y retrouver dans les fils
que cdo.

Amicordialement.

lSteph










Avatar
Corto
Bonjour,
Tu peux directement supprimer les select :
Sheets("Analyse des incriptions aux CCF").Rows("1:1").Find(What:=Nom,
After:¬tiveCell, LookIn:=xlFormulas, LookAt:=xlPart,
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:úlse,
SearchFormat:úlse).Activate

ou pour plus de clarté passer par une variables :
Set MAZONE = Sheets("Analyse des incriptions aux CCF").Rows("1:1")
MAZONE.Find(What:=Nom, After:¬tiveCell, LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:úlse, SearchFormat:úlse).Activate


Corto
Au de là de ta remarque sur les .select c'est la manière de les éluder qui
m'interesse
Ils sont au nombre de 4 :

Sheets("Analyse des incriptions aux CCF").Select
Rows("1:1").Select
Selection.Find(What:=Nom, After:¬tiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate

Comment éviter les Sheets("Analyse des incriptions aux CCF").Select et
Rows("1:1").Select et faire en sorte que l'instruction qui suit puisse
fonctionner sans que son résultat soit altéré

Sheets(I).Select
For Each c In Worksheets(Nom).Range("C3", "Y19")
If c <> "" Then
Sheets("Analyse des incriptions aux CCF").Select
For Each D In Worksheets("Analyse des incriptions aux CCF").Range([B2],
[B65535].End(xlUp))

De même pour ces 2 .Select trés important pour un fonctionnement correct des
2 boucles

Je suis preneur de tes solutions

Si je n'ai pas intégré dans la Macro le traitement de tous les Mois donnant
à l'utilisateur le soin de le réaliser par le changement de la zone de
selection qui le conditionne, c'est que si tu analyses bien la problématique
chaque zone est tributaire du nombre de semaines donc du nombre de colonnes
qui peut entrainer le nombre de lignes (5 Semaines pour un seul et même Mois,
jusqu'à la colonne Z maximum du tableau il ne loge que 4 semaines)
Compte tenu de cet aléa difficilement gérable par des instructions j'ai
préféré le laisser en traitement manuel
De plus si seuls quelques mois sont à traiter une Macro par mois avec la
zone appropriée et le tour est joué

Tu sembles dire que mon code plante je l'ai testé pour le mois d'Avril avec
succés
Où ne fonctionnerait il pas pour toi ????

Voilà donc toutes ces questions
Merci de tes réponses


Bonjour,

Si tu relis mon message c'est précisé:

Les .select sont presque toujours inutiles et ralentissent
l'execution
les déclarations typées de variables en revanche sont de nature à
l'optimiser.

Pour savoir ce qui plante dans ton code lorsqu'on change de mois, (je
n'ai pas eu de mal puisque c'est ce qui me posait difficulté dans ma
première proposition) je t'ai indiqué à quel endroit.

Si tu veux un code complet, vois celui de l'exemple que j'ai proposé
hier en fin d'après midi.
Plus de recherche de colonne, on la crée en fonction des feuilles
insérées au classeur lorsque la macro est déclanchée par validation du
mois dans la cellule [b1]

Tu peux peut-être y intégrer les autres améliorations que tu
envisages.

@+

Cordialement.

lSteph





On 15 mai, 10:27, FFO wrote:
Salut lSteph
Et merci pour ton aide

j'ai regardais avec intêret tes remarques concernant mon code un peu plus
light
c'est grâce à 2 boucles imbriquées l'une dans l'autre que j'ai pu l'allèger
et de m'affranchir en plus de la position des matières dans l'onglet de
recopie ce qui évite de gérer les cellules de destination
Double avantage
Mais tu sembles dire que des améliorations potentielles de plusieurs natures
seraient envisageables
Peux tu sur la base de ce que j'ai proposé et ce ligne par ligne (ce que
j'ai proposé avec ta suggestion) m'apporter les corrections qui permettraient
d'améliorer la performance avec les explications en correspondances
Et ainsi grâce à toi de m'améliorer
Je demande toujours à apprendre
Merci d'avance de me consacrer un peu de ton temps


Bonjour FFO,
;-)
Uniquement à toutes fins utiles et si je puis permettre:
Une Macro encore plus light :
tu peux aussi tout à fait éviter les .select

(en revanche déclarer ses variables est un choix qui ne demande guère
qu'une ou deux lignes de plus )
Ceci serait à vérifier (remplace Avril par Mai par exemple)....:
Elle ne nécessite que l'actualisation de
("C3", "Y19")
de la ligne :
For Each c In Worksheets(Nom).Range("C3", "Y19")
Pour choisir la bonne zone à traiter en fonction du mois (Avril sur cette
ligne)
....me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) >>>>> c.Offset(-((c.Row) - 2), 0)
- - -

Sinon, pour le type de connexion je te comprends, lorsque je ne suis
pas chez moi , j'ai le même pb que toi , j'utilise l'interface de
google qui est qdmême un peu mieux pour s'y retrouver dans les fils
que cdo.
Amicordialement.
lSteph











Avatar
FFO
Salut Corto
Merci pour ta réponse que je capitalise
As tu la même recette pour la suite d'instruction :
Sheets(I).Select
For Each c In Worksheets(Nom).Range("C3", "Y19")
If c <> "" Then
Sheets("Analyse des incriptions aux CCF").Select
For Each D In Worksheets("Analyse des incriptions aux CCF").Range([B2],
[B65535].End(xlUp))
Peut on sans mettre à mal le fonctionnement du code supprimer les 2 .Select

Merci pour ton aide



Bonjour,
Tu peux directement supprimer les select :
Sheets("Analyse des incriptions aux CCF").Rows("1:1").Find(What:=Nom,
After:¬tiveCell, LookIn:=xlFormulas, LookAt:=xlPart,
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:úlse,
SearchFormat:úlse).Activate

ou pour plus de clarté passer par une variables :
Set MAZONE = Sheets("Analyse des incriptions aux CCF").Rows("1:1")
MAZONE.Find(What:=Nom, After:¬tiveCell, LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:úlse, SearchFormat:úlse).Activate


Corto
Au de là de ta remarque sur les .select c'est la manière de les éluder qui
m'interesse
Ils sont au nombre de 4 :

Sheets("Analyse des incriptions aux CCF").Select
Rows("1:1").Select
Selection.Find(What:=Nom, After:¬tiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate

Comment éviter les Sheets("Analyse des incriptions aux CCF").Select et
Rows("1:1").Select et faire en sorte que l'instruction qui suit puisse
fonctionner sans que son résultat soit altéré

Sheets(I).Select
For Each c In Worksheets(Nom).Range("C3", "Y19")
If c <> "" Then
Sheets("Analyse des incriptions aux CCF").Select
For Each D In Worksheets("Analyse des incriptions aux CCF").Range([B2],
[B65535].End(xlUp))

De même pour ces 2 .Select trés important pour un fonctionnement correct des
2 boucles

Je suis preneur de tes solutions

Si je n'ai pas intégré dans la Macro le traitement de tous les Mois donnant
à l'utilisateur le soin de le réaliser par le changement de la zone de
selection qui le conditionne, c'est que si tu analyses bien la problématique
chaque zone est tributaire du nombre de semaines donc du nombre de colonnes
qui peut entrainer le nombre de lignes (5 Semaines pour un seul et même Mois,
jusqu'à la colonne Z maximum du tableau il ne loge que 4 semaines)
Compte tenu de cet aléa difficilement gérable par des instructions j'ai
préféré le laisser en traitement manuel
De plus si seuls quelques mois sont à traiter une Macro par mois avec la
zone appropriée et le tour est joué

Tu sembles dire que mon code plante je l'ai testé pour le mois d'Avril avec
succés
Où ne fonctionnerait il pas pour toi ????

Voilà donc toutes ces questions
Merci de tes réponses


Bonjour,

Si tu relis mon message c'est précisé:

Les .select sont presque toujours inutiles et ralentissent
l'execution
les déclarations typées de variables en revanche sont de nature à
l'optimiser.

Pour savoir ce qui plante dans ton code lorsqu'on change de mois, (je
n'ai pas eu de mal puisque c'est ce qui me posait difficulté dans ma
première proposition) je t'ai indiqué à quel endroit.

Si tu veux un code complet, vois celui de l'exemple que j'ai proposé
hier en fin d'après midi.
Plus de recherche de colonne, on la crée en fonction des feuilles
insérées au classeur lorsque la macro est déclanchée par validation du
mois dans la cellule [b1]

Tu peux peut-être y intégrer les autres améliorations que tu
envisages.

@+

Cordialement.

lSteph





On 15 mai, 10:27, FFO wrote:
Salut lSteph
Et merci pour ton aide

j'ai regardais avec intêret tes remarques concernant mon code un peu plus
light
c'est grâce à 2 boucles imbriquées l'une dans l'autre que j'ai pu l'allèger
et de m'affranchir en plus de la position des matières dans l'onglet de
recopie ce qui évite de gérer les cellules de destination
Double avantage
Mais tu sembles dire que des améliorations potentielles de plusieurs natures
seraient envisageables
Peux tu sur la base de ce que j'ai proposé et ce ligne par ligne (ce que
j'ai proposé avec ta suggestion) m'apporter les corrections qui permettraient
d'améliorer la performance avec les explications en correspondances
Et ainsi grâce à toi de m'améliorer
Je demande toujours à apprendre
Merci d'avance de me consacrer un peu de ton temps


Bonjour FFO,
;-)
Uniquement à toutes fins utiles et si je puis permettre:
Une Macro encore plus light :
tu peux aussi tout à fait éviter les .select

(en revanche déclarer ses variables est un choix qui ne demande guère
qu'une ou deux lignes de plus )
Ceci serait à vérifier (remplace Avril par Mai par exemple)....:
Elle ne nécessite que l'actualisation de
("C3", "Y19")
de la ligne :
For Each c In Worksheets(Nom).Range("C3", "Y19")
Pour choisir la bonne zone à traiter en fonction du mois (Avril sur cette
ligne)
....me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) > >>>>> c.Offset(-((c.Row) - 2), 0)
- - -

Sinon, pour le type de connexion je te comprends, lorsque je ne suis
pas chez moi , j'ai le même pb que toi , j'utilise l'interface de
google qui est qdmême un peu mieux pour s'y retrouver dans les fils
que cdo.
Amicordialement.
lSteph














Avatar
lSteph
Re,
1.Les .Select
Pour les supprimer il suffit de les enlever et d'utiliser l'objet
directement.
Cf réponse de Corto (Merci Corto)

2.Pour le reste

...je l'ai testé pour le mois d'Avril
Alors qu'il me semble bien avoir précisément indiqué:

Ceci serait à vérifier (remplace Avril par Mai par exemple)




Tu sembles dire que mon code plante...
...je ne semble pas dire, j'infirme simplement cette assertion par

laquelle l'utilisateur aurait cru pouvoir contourner le fait que tu ne
prenne pas en charge le chgt de mois:

Elle ne nécessite que l'actualisation de
("C3", "Y19")
de la ligne :
For Each c In Worksheets(Nom).Range("C3", "Y19")

Pour choisir la bonne zone à traiter en fonction du mois (Avril sur cet te
ligne)


...me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) =
c.Offset(-((c.Row) - 2), 0)


si tu n'en tiens pas compte la macro plante effectivement.

Est-ce plus clair?

Amicalmement.

LSteph
(On reveille celui qui dort, pas celui qui fait semblant)





On 15 mai, 13:20, FFO wrote:
Au de là de ta remarque sur les .select c'est la manière de les élu der qui
m'interesse
Ils sont au nombre de 4 :

Sheets("Analyse des incriptions aux CCF").Select
Rows("1:1").Select
Selection.Find(What:=Nom, After:¬tiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate

Comment éviter les Sheets("Analyse des incriptions aux CCF").Select et
Rows("1:1").Select et faire en sorte que l'instruction qui suit puisse
fonctionner sans que son résultat soit altéré

Sheets(I).Select
For Each c In Worksheets(Nom).Range("C3", "Y19")
If c <> "" Then
Sheets("Analyse des incriptions aux CCF").Select
For Each D In Worksheets("Analyse des incriptions aux CCF").Range([B2],
[B65535].End(xlUp))

De même pour ces 2 .Select trés important pour un fonctionnement corr ect des
2 boucles

Je suis preneur de tes solutions

Si je n'ai pas intégré dans la Macro le traitement de tous les Mois d onnant
à l'utilisateur le soin de le réaliser par le changement de la zone de
selection qui le conditionne, c'est que si tu analyses bien la probléma tique
chaque zone est tributaire du nombre de semaines donc du nombre de colonn es
qui peut entrainer le nombre de lignes (5 Semaines pour un seul et même Mois,
jusqu'à la colonne Z maximum du tableau il ne loge que 4 semaines)
Compte tenu de cet aléa difficilement gérable par des instructions j' ai
préféré le laisser en traitement manuel
De plus si seuls quelques mois sont à traiter une Macro par mois avec la
zone appropriée et le tour est joué

Tu sembles dire que mon code plante je l'ai testé pour le mois d'Avril avec
succés
Où ne fonctionnerait il pas pour toi ????

Voilà donc toutes ces questions
Merci de tes réponses


Bonjour,

Si tu relis mon message c'est précisé:

Les .select sont presque toujours inutiles et ralentissent
l'execution
les déclarations typées de variables en revanche sont de nature à
l'optimiser.

Pour savoir ce qui plante dans ton code lorsqu'on change de mois, (je
n'ai pas eu de mal puisque c'est ce qui me posait difficulté dans ma
première proposition) je t'ai indiqué à quel endroit.

Si tu veux un code complet, vois celui de l'exemple que j'ai proposé
hier en fin d'après midi.
Plus de recherche de colonne, on la crée en fonction des feuilles
insérées au classeur lorsque la macro est déclanchée par valida tion du
mois dans la cellule [b1]

Tu peux peut-être y intégrer les autres améliorations que tu
envisages.

@+

Cordialement.

lSteph

On 15 mai, 10:27, FFO wrote:
Salut lSteph
Et merci pour ton aide

j'ai regardais avec intêret tes remarques concernant mon code un pe u plus
light
c'est grâce à 2 boucles imbriquées l'une dans l'autre que j'ai pu l'allèger
et de m'affranchir en plus de la position des matières dans l'ongle t de
recopie ce qui évite de gérer les cellules de destination
Double avantage
Mais tu sembles dire que des améliorations potentielles de plusieur s natures
seraient envisageables
Peux tu sur la base de ce que j'ai proposé et ce ligne par ligne (c e que
j'ai proposé avec ta suggestion) m'apporter les corrections qui per mettraient
d'améliorer la performance avec les explications en correspondances
Et ainsi grâce à toi de m'améliorer
Je demande toujours à apprendre
Merci d'avance de me consacrer un peu de ton temps




Bonjour FFO,

;-)
Uniquement à toutes fins utiles et si je puis permettre:
Une Macro encore plus light :
tu peux aussi tout à fait éviter les .select

(en revanche déclarer ses variables est un choix qui ne demande g uère
qu'une ou deux lignes de plus )

Ceci serait à vérifier (remplace Avril par Mai par exemple)....:
Elle ne nécessite que l'actualisation de
("C3", "Y19")
de la ligne :
For Each c In Worksheets(Nom).Range("C3", "Y19")

Pour choisir la bonne zone à traiter en fonction du mois (Avril sur cette
ligne)


....me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) =
c.Offset(-((c.Row) - 2), 0)


- - -
Sinon, pour le type de connexion je te comprends, lorsque je ne suis
pas chez moi , j'ai le même pb que toi , j'utilise l'interface de
google qui est qdmême un peu mieux pour s'y retrouver dans les f ils
que cdo.

Amicordialement.

lSteph









Avatar
FFO
Désolé je n'ai pas tout compris (Je n'arrive pas à savoir si pour toi elle
plante ou ne plante pas)
Peut être suis je dur à la comprenette
En tout état de cause en actualisant la ligne
For Each c In Worksheets(Nom).Range("C3", "Y19")
En fonction du mois
J'ai essayé celà fonctionne
Libre à l'utilisateur d'accepter la contrainte ou d'opter pour une
conception plus automatique

Merci quand même de toute vos interventions


Re,
1.Les .Select
Pour les supprimer il suffit de les enlever et d'utiliser l'objet
directement.
Cf réponse de Corto (Merci Corto)

2.Pour le reste

...je l'ai testé pour le mois d'Avril
Alors qu'il me semble bien avoir précisément indiqué:

Ceci serait à vérifier (remplace Avril par Mai par exemple)




Tu sembles dire que mon code plante...
....je ne semble pas dire, j'infirme simplement cette assertion par

laquelle l'utilisateur aurait cru pouvoir contourner le fait que tu ne
prenne pas en charge le chgt de mois:

Elle ne nécessite que l'actualisation de
("C3", "Y19")
de la ligne :
For Each c In Worksheets(Nom).Range("C3", "Y19")

Pour choisir la bonne zone à traiter en fonction du mois (Avril sur cette
ligne)


....me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) > > c.Offset(-((c.Row) - 2), 0)


si tu n'en tiens pas compte la macro plante effectivement.

Est-ce plus clair?

Amicalmement.

LSteph
(On reveille celui qui dort, pas celui qui fait semblant)





On 15 mai, 13:20, FFO wrote:
Au de là de ta remarque sur les .select c'est la manière de les éluder qui
m'interesse
Ils sont au nombre de 4 :

Sheets("Analyse des incriptions aux CCF").Select
Rows("1:1").Select
Selection.Find(What:=Nom, After:¬tiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate

Comment éviter les Sheets("Analyse des incriptions aux CCF").Select et
Rows("1:1").Select et faire en sorte que l'instruction qui suit puisse
fonctionner sans que son résultat soit altéré

Sheets(I).Select
For Each c In Worksheets(Nom).Range("C3", "Y19")
If c <> "" Then
Sheets("Analyse des incriptions aux CCF").Select
For Each D In Worksheets("Analyse des incriptions aux CCF").Range([B2],
[B65535].End(xlUp))

De même pour ces 2 .Select trés important pour un fonctionnement correct des
2 boucles

Je suis preneur de tes solutions

Si je n'ai pas intégré dans la Macro le traitement de tous les Mois donnant
à l'utilisateur le soin de le réaliser par le changement de la zone de
selection qui le conditionne, c'est que si tu analyses bien la problématique
chaque zone est tributaire du nombre de semaines donc du nombre de colonnes
qui peut entrainer le nombre de lignes (5 Semaines pour un seul et même Mois,
jusqu'à la colonne Z maximum du tableau il ne loge que 4 semaines)
Compte tenu de cet aléa difficilement gérable par des instructions j'ai
préféré le laisser en traitement manuel
De plus si seuls quelques mois sont à traiter une Macro par mois avec la
zone appropriée et le tour est joué

Tu sembles dire que mon code plante je l'ai testé pour le mois d'Avril avec
succés
Où ne fonctionnerait il pas pour toi ????

Voilà donc toutes ces questions
Merci de tes réponses


Bonjour,

Si tu relis mon message c'est précisé:

Les .select sont presque toujours inutiles et ralentissent
l'execution
les déclarations typées de variables en revanche sont de nature à
l'optimiser.

Pour savoir ce qui plante dans ton code lorsqu'on change de mois, (je
n'ai pas eu de mal puisque c'est ce qui me posait difficulté dans ma
première proposition) je t'ai indiqué à quel endroit.

Si tu veux un code complet, vois celui de l'exemple que j'ai proposé
hier en fin d'après midi.
Plus de recherche de colonne, on la crée en fonction des feuilles
insérées au classeur lorsque la macro est déclanchée par validation du
mois dans la cellule [b1]

Tu peux peut-être y intégrer les autres améliorations que tu
envisages.

@+

Cordialement.

lSteph

On 15 mai, 10:27, FFO wrote:
Salut lSteph
Et merci pour ton aide

j'ai regardais avec intêret tes remarques concernant mon code un peu plus
light
c'est grâce à 2 boucles imbriquées l'une dans l'autre que j'ai pu l'allèger
et de m'affranchir en plus de la position des matières dans l'onglet de
recopie ce qui évite de gérer les cellules de destination
Double avantage
Mais tu sembles dire que des améliorations potentielles de plusieurs natures
seraient envisageables
Peux tu sur la base de ce que j'ai proposé et ce ligne par ligne (ce que
j'ai proposé avec ta suggestion) m'apporter les corrections qui permettraient
d'améliorer la performance avec les explications en correspondances
Et ainsi grâce à toi de m'améliorer
Je demande toujours à apprendre
Merci d'avance de me consacrer un peu de ton temps




Bonjour FFO,

;-)
Uniquement à toutes fins utiles et si je puis permettre:
Une Macro encore plus light :
tu peux aussi tout à fait éviter les .select

(en revanche déclarer ses variables est un choix qui ne demande guère
qu'une ou deux lignes de plus )

Ceci serait à vérifier (remplace Avril par Mai par exemple)....:
Elle ne nécessite que l'actualisation de
("C3", "Y19")
de la ligne :
For Each c In Worksheets(Nom).Range("C3", "Y19")

Pour choisir la bonne zone à traiter en fonction du mois (Avril sur cette
ligne)


....me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) > > > > > > c.Offset(-((c.Row) - 2), 0)


- - -
Sinon, pour le type de connexion je te comprends, lorsque je ne suis
pas chez moi , j'ai le même pb que toi , j'utilise l'interface de
google qui est qdmême un peu mieux pour s'y retrouver dans les fils
que cdo.

Amicordialement.

lSteph














Avatar
lSteph
Bonjour FFO,
Oui, peut-être n'as tu pas vu, donc si tu prends le mois de MAI par
exemple
Désolé je n'ai pas tout compris (Je n'arrive pas à savoir si pour t oi elle
plante ou ne plante pas)
Peut être suis je dur à la comprenette
En tout état de cause en actualisant la ligne
For Each c In Worksheets(Nom).Range("C3", "Y19")
Tu vas donc simplement remplacer par c23:Y39


...maintenant execute et regarde la date que tu récupères en regard
des noms...

donc
....me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) =
c.Offset(-((c.Row) - 2), 0)




:-?

LSteph



Avatar
ffo
Enfin !!!
Dans un ultime effort d'analyse ( tous les résultats à premier vue sont bien
présents)
effectivement donc si ils sont bien là celui concernant la date est erroné
Au lieu de rester vague dans tes remarques somme toute trés pertinantes de
signifier de manière précise l'objet du litige (date ramenée incorrect)
beaucoup moins d'encre informatique aurait été nécessaire pour ma
compréhension
Mais peut être aimes tu le jeux des devinettes

Donc pour revenir sur mon code light il faut en plus de la ligne :

For Each c In Worksheets(Nom).Range("C3", "Y19")

pour laquelle on doit corriger ("C3", "Y19") en fonction du mois

corriger la ligne :

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) =
c.Offset(-((c.Row) - 2), 0)

La partie (-((c.Row) - 2), 0
et plus précisement le 2 représentant la ligne des dates du mois (ici Avril)
Pour par exemple 22 si l'on souhaite traité le mois de Mais ce qui donne la
ligne :

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) =
c.Offset(-((c.Row) - 22), 0)

Bon une correction de plus
Ce qui porte à 2 les lignes à réactualiser par mois
certainement pas rédhibitoire tu en conviendras

Merci pour ton aide tortueuse mais aide quand même



Bonjour FFO,
Oui, peut-être n'as tu pas vu, donc si tu prends le mois de MAI par
exemple
Désolé je n'ai pas tout compris (Je n'arrive pas à savoir si pour toi elle
plante ou ne plante pas)
Peut être suis je dur à la comprenette
En tout état de cause en actualisant la ligne
For Each c In Worksheets(Nom).Range("C3", "Y19")
Tu vas donc simplement remplacer par c23:Y39


....maintenant execute et regarde la date que tu récupères en regard
des noms...

donc
....me semblerait qu'il reste un truc à changer aussi par là:

Sheets("Analyse des incriptions aux CCF").Range(Colonne & D.Row) > > > > c.Offset(-((c.Row) - 2), 0)




:-?

LSteph







1 2 3 4