Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tri colonne et recherche

18 réponses
Avatar
dyj Orange
Bonjour au groupe,
Sur un très gros fichier Excel (30000-40000 lignes, 40-50 colonnes), je
voudrai faire deux choses:
1. Connaitre la première colonne disponible pour y insérer des infos.
2. Sur une colonne particulière "K", dont les cellules peuvent avoir
plusieurs valeurs, je ne voudrai que conserver les lignes où la cellule
correspondant à la colonne K a pour valeur "couvert".
Je vous remercie pour votre aide.

8 réponses

1 2
Avatar
Jacquouille
Bonjour
Enfin, quand je dis bon, c'est un euphémisme, car je ne comprends rien, mais
alors là, rien à ta question.
Si tu veux comparer les cellules d'une colonne à la cel A2
-------------------
compt = 0
For Each c In Range("b1:b100")
If [c] = [a2] Then compt = compt + 1
Next
MsgBox compt
------------------

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f69b032$0$21450$

Merci pour toutes ces infos. J'en ai fait des Sub avec passage de
paramètres, mon développement est beaucoup plus clean. Je me heurte à un
problème d'écriture à moins que ce soit impossible. J'insère dans une
colonne vide la formule suivante avec ce code:
With Rg.Offset(, Offset)
'Insertion de la formule pour comparer chaque cellule Lx avec la
cellule A2
.Formula = "=CountIf(DC2:DC2,$EC$1)"
'.Formula = "=CountIf(xR)" ' "=CountIf(A2:A2,$P$1)"
'Fait disparaître la formule pour la valeur 1 si egal ou 0 si
différent
.Value = .Value
End With
Il marche bien, mais comme tu le vois j'ai mis en dur la formule. D'où ma
question: est-il possible d'écrire "=CountIf(MaRef)" MaRef étant initialisé
avant l'appel ?. J'ai fait plusieurs essais sans succès.

"Jacquouille" a écrit dans le message de groupe de discussion :
4f679054$0$7681$

Bonsoir

Vois ceci:

For Each c In Range("a2:a5")
If [c] = 12 Then
c.Interior.ColorIndex = 3
ad = c.Address
LL = c.Row
MsgBox ad
MsgBox "Ligne " & LL
End If
Next

Tu supprimes le msgbox qui ne te convient pas

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f671114$0$21457$

Merci, c'est très performant.
A l'intérieur de ta boucle "For", comment puis je récupérer la ligne de la
l'occurrence trouvée. J'ai déjà la colonne. Je ne suis pas familier avec ce
type d'écriture.


"Jacquouille" a écrit dans le message de groupe de discussion :
4f663c20$0$7688$

Petite correction....;
entre interior et colorIndex, il faut mettre un . (point) et non un
point-virgule (lapsus claviae)
soit:
For each c in range ("a2:a100")
If [c] then c.interior.colorIndex=3
???????? >----------------------------------- je voudrai récupérer le
N° de la ligne
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacquouille" a écrit dans le message de groupe de discussion :
4f662d98$0$7697$

Bonsoir

Le string étant par définition très petit, je préfère m'en passer, voire que
les autres s'en passent aussi.
perso, je me contenterais de ceci......
For each c in range ("a2:a100")
If [c] then c.interior;colorIndex=3
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f65f04f$0$21485$

Merci beaucoup.C'est adapté et inclus dans mon vba.
Du coup je reviens avec une autre question. je cherche une méthode rapide
pour retrouver un string de caractères dans une colonne avec la fonction
suivante:
-----
strChaine="12"
Set rngTrouve = ActiveSheet.Columns(17).Cells.Find( 'what:=strChaine)
----
Si dans cette colonne j'ai les valeurs 1245, 5612, 12, 6912 Il me renvoie la
première occurrence trouvée 1234 (ligne 1)alors que je m'attends à avoir 12
(ligne 3)
Ou est mon erreur de code. Merci

"Jacquouille" a écrit dans le message de groupe de discussion :
4f64b550$0$7685$

Bonjour
La dernière colonne:
Sub Rechercher_la_dernière_colonne()
Range("IV1").Select
Selection.End(xlToLeft).Select
End Sub
----------------------------
Supprimer les lignes dont la cellule K est différente de "couvert"
La ligne 1 est réservée au titre de colonne.

Sub Je_supprime_ligne()
For i = [K65536].End(3).Row To 2 Step -1
For Each c In Range("K2:K" & i)
If Range("K" & i).Value <> "couvert" Then Rows(i).Delete
Next
Next
End Sub
------------------------------------
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."

"dyj Orange" a écrit dans le message de groupe de discussion :
4f64774b$0$12498$

Bonjour au groupe,
Sur un très gros fichier Excel (30000-40000 lignes, 40-50 colonnes), je
voudrai faire deux choses:
1. Connaitre la première colonne disponible pour y insérer des infos.
2. Sur une colonne particulière "K", dont les cellules peuvent avoir
plusieurs valeurs, je ne voudrai que conserver les lignes où la cellule
correspondant à la colonne K a pour valeur "couvert".
Je vous remercie pour votre aide.
Avatar
dyj Orange
Mille excuses pour cet incompréhension. Je vais essayer très plus clair.
Pour augmenter les performance du vba sur une feuille (65000 lignes et 106
colonnes), j'ai trouvé cette solution qui consiste à mettre dans toutes les
cellules de ma 108ième colonne une formule de type "=CountIf(A2:A2,$P$1)"
Ainsi cette colonne est remplie de 1 si ma formule est vraie et 0 si fausse.
Après j'applique un filtre sur cette colonne et je me retrouve dans ma
feuille active avec uniquement les valeurs vraies que je copie ensuite dans
une autre feuille.
Avec une boucle traditionnelle, c'est infernale en temps ... alors qu'avec
ce procédé c'est moins de 10 secondes !!!
J'aimerai si possible ? que cette formule soit dynamique "=CountIf(Ref)" en
ayant au préalable initialisé Ref="A2:A2,$P$1"


"Jacquouille" a écrit dans le message de groupe de discussion :
4f69e0f3$0$7694$

Bonjour
Enfin, quand je dis bon, c'est un euphémisme, car je ne comprends rien, mais
alors là, rien à ta question.
Si tu veux comparer les cellules d'une colonne à la cel A2
-------------------
compt = 0
For Each c In Range("b1:b100")
If [c] = [a2] Then compt = compt + 1
Next
MsgBox compt
------------------

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f69b032$0$21450$

Merci pour toutes ces infos. J'en ai fait des Sub avec passage de
paramètres, mon développement est beaucoup plus clean. Je me heurte à un
problème d'écriture à moins que ce soit impossible. J'insère dans une
colonne vide la formule suivante avec ce code:
With Rg.Offset(, Offset)
'Insertion de la formule pour comparer chaque cellule Lx avec la
cellule A2
.Formula = "=CountIf(DC2:DC2,$EC$1)"
'.Formula = "=CountIf(xR)" ' "=CountIf(A2:A2,$P$1)"
'Fait disparaître la formule pour la valeur 1 si egal ou 0 si
différent
.Value = .Value
End With
Il marche bien, mais comme tu le vois j'ai mis en dur la formule. D'où ma
question: est-il possible d'écrire "=CountIf(MaRef)" MaRef étant initialisé
avant l'appel ?. J'ai fait plusieurs essais sans succès.

"Jacquouille" a écrit dans le message de groupe de discussion :
4f679054$0$7681$

Bonsoir

Vois ceci:

For Each c In Range("a2:a5")
If [c] = 12 Then
c.Interior.ColorIndex = 3
ad = c.Address
LL = c.Row
MsgBox ad
MsgBox "Ligne " & LL
End If
Next

Tu supprimes le msgbox qui ne te convient pas

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f671114$0$21457$

Merci, c'est très performant.
A l'intérieur de ta boucle "For", comment puis je récupérer la ligne de la
l'occurrence trouvée. J'ai déjà la colonne. Je ne suis pas familier avec ce
type d'écriture.


"Jacquouille" a écrit dans le message de groupe de discussion :
4f663c20$0$7688$

Petite correction....;
entre interior et colorIndex, il faut mettre un . (point) et non un
point-virgule (lapsus claviae)
soit:
For each c in range ("a2:a100")
If [c] then c.interior.colorIndex=3
???????? >----------------------------------- je voudrai récupérer le
N° de la ligne
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacquouille" a écrit dans le message de groupe de discussion :
4f662d98$0$7697$

Bonsoir

Le string étant par définition très petit, je préfère m'en passer, voire que
les autres s'en passent aussi.
perso, je me contenterais de ceci......
For each c in range ("a2:a100")
If [c] then c.interior;colorIndex=3
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f65f04f$0$21485$

Merci beaucoup.C'est adapté et inclus dans mon vba.
Du coup je reviens avec une autre question. je cherche une méthode rapide
pour retrouver un string de caractères dans une colonne avec la fonction
suivante:
-----
strChaine="12"
Set rngTrouve = ActiveSheet.Columns(17).Cells.Find( 'what:=strChaine)
----
Si dans cette colonne j'ai les valeurs 1245, 5612, 12, 6912 Il me renvoie la
première occurrence trouvée 1234 (ligne 1)alors que je m'attends à avoir 12
(ligne 3)
Ou est mon erreur de code. Merci

"Jacquouille" a écrit dans le message de groupe de discussion :
4f64b550$0$7685$

Bonjour
La dernière colonne:
Sub Rechercher_la_dernière_colonne()
Range("IV1").Select
Selection.End(xlToLeft).Select
End Sub
----------------------------
Supprimer les lignes dont la cellule K est différente de "couvert"
La ligne 1 est réservée au titre de colonne.

Sub Je_supprime_ligne()
For i = [K65536].End(3).Row To 2 Step -1
For Each c In Range("K2:K" & i)
If Range("K" & i).Value <> "couvert" Then Rows(i).Delete
Next
Next
End Sub
------------------------------------
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."

"dyj Orange" a écrit dans le message de groupe de discussion :
4f64774b$0$12498$

Bonjour au groupe,
Sur un très gros fichier Excel (30000-40000 lignes, 40-50 colonnes), je
voudrai faire deux choses:
1. Connaitre la première colonne disponible pour y insérer des infos.
2. Sur une colonne particulière "K", dont les cellules peuvent avoir
plusieurs valeurs, je ne voudrai que conserver les lignes où la cellule
correspondant à la colonne K a pour valeur "couvert".
Je vous remercie pour votre aide.
Avatar
Jacquouille
Bonsoir
Tu dois être bien jeune pour être si inféodé au temps.
Prends le temps de vivre, de respirer, de regarder les fleurs ...pendant que
tourne ta macro. La fin arrivera et plus vite que ce que tu ne crois.
Perso, et si j'ai bien compris, voici ce que je ferais...
Les données sont dans la feuille A. je copie celle-ci en feuille B.
Dans cette feuille, j'efface toutes les lignes dont les cellules de la
colonne x ne répondent pas au critère y.

Pourquoi aller bricoler une colonne supplémentaire, dans laquelle Excel va
mettre le résultat de l'analyse si la cel correspond à une autre, puis un
filtre ?
Pourquoi, dès lors, ne pas filtrer la feuille B sur le même critère?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."

"dyj Orange" a écrit dans le message de groupe de discussion :
4f6a0a3f$0$21472$

Mille excuses pour cet incompréhension. Je vais essayer très plus clair.
Pour augmenter les performance du vba sur une feuille (65000 lignes et 106
colonnes), j'ai trouvé cette solution qui consiste à mettre dans toutes les
cellules de ma 108ième colonne une formule de type "=CountIf(A2:A2,$P$1)"
Ainsi cette colonne est remplie de 1 si ma formule est vraie et 0 si fausse.
Après j'applique un filtre sur cette colonne et je me retrouve dans ma
feuille active avec uniquement les valeurs vraies que je copie ensuite dans
une autre feuille.
Avec une boucle traditionnelle, c'est infernale en temps ... alors qu'avec
ce procédé c'est moins de 10 secondes !!!
J'aimerai si possible ? que cette formule soit dynamique "=CountIf(Ref)" en
ayant au préalable initialisé Ref="A2:A2,$P$1"


"Jacquouille" a écrit dans le message de groupe de discussion :
4f69e0f3$0$7694$

Bonjour
Enfin, quand je dis bon, c'est un euphémisme, car je ne comprends rien, mais
alors là, rien à ta question.
Si tu veux comparer les cellules d'une colonne à la cel A2
-------------------
compt = 0
For Each c In Range("b1:b100")
If [c] = [a2] Then compt = compt + 1
Next
MsgBox compt
------------------

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f69b032$0$21450$

Merci pour toutes ces infos. J'en ai fait des Sub avec passage de
paramètres, mon développement est beaucoup plus clean. Je me heurte à un
problème d'écriture à moins que ce soit impossible. J'insère dans une
colonne vide la formule suivante avec ce code:
With Rg.Offset(, Offset)
'Insertion de la formule pour comparer chaque cellule Lx avec la
cellule A2
.Formula = "=CountIf(DC2:DC2,$EC$1)"
'.Formula = "=CountIf(xR)" ' "=CountIf(A2:A2,$P$1)"
'Fait disparaître la formule pour la valeur 1 si egal ou 0 si
différent
.Value = .Value
End With
Il marche bien, mais comme tu le vois j'ai mis en dur la formule. D'où ma
question: est-il possible d'écrire "=CountIf(MaRef)" MaRef étant initialisé
avant l'appel ?. J'ai fait plusieurs essais sans succès.

"Jacquouille" a écrit dans le message de groupe de discussion :
4f679054$0$7681$

Bonsoir

Vois ceci:

For Each c In Range("a2:a5")
If [c] = 12 Then
c.Interior.ColorIndex = 3
ad = c.Address
LL = c.Row
MsgBox ad
MsgBox "Ligne " & LL
End If
Next

Tu supprimes le msgbox qui ne te convient pas

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f671114$0$21457$

Merci, c'est très performant.
A l'intérieur de ta boucle "For", comment puis je récupérer la ligne de la
l'occurrence trouvée. J'ai déjà la colonne. Je ne suis pas familier avec ce
type d'écriture.


"Jacquouille" a écrit dans le message de groupe de discussion :
4f663c20$0$7688$

Petite correction....;
entre interior et colorIndex, il faut mettre un . (point) et non un
point-virgule (lapsus claviae)
soit:
For each c in range ("a2:a100")
If [c] then c.interior.colorIndex=3
???????? >----------------------------------- je voudrai récupérer le
N° de la ligne
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacquouille" a écrit dans le message de groupe de discussion :
4f662d98$0$7697$

Bonsoir

Le string étant par définition très petit, je préfère m'en passer, voire que
les autres s'en passent aussi.
perso, je me contenterais de ceci......
For each c in range ("a2:a100")
If [c] then c.interior;colorIndex=3
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f65f04f$0$21485$

Merci beaucoup.C'est adapté et inclus dans mon vba.
Du coup je reviens avec une autre question. je cherche une méthode rapide
pour retrouver un string de caractères dans une colonne avec la fonction
suivante:
-----
strChaine="12"
Set rngTrouve = ActiveSheet.Columns(17).Cells.Find( 'what:=strChaine)
----
Si dans cette colonne j'ai les valeurs 1245, 5612, 12, 6912 Il me renvoie la
première occurrence trouvée 1234 (ligne 1)alors que je m'attends à avoir 12
(ligne 3)
Ou est mon erreur de code. Merci

"Jacquouille" a écrit dans le message de groupe de discussion :
4f64b550$0$7685$

Bonjour
La dernière colonne:
Sub Rechercher_la_dernière_colonne()
Range("IV1").Select
Selection.End(xlToLeft).Select
End Sub
----------------------------
Supprimer les lignes dont la cellule K est différente de "couvert"
La ligne 1 est réservée au titre de colonne.

Sub Je_supprime_ligne()
For i = [K65536].End(3).Row To 2 Step -1
For Each c In Range("K2:K" & i)
If Range("K" & i).Value <> "couvert" Then Rows(i).Delete
Next
Next
End Sub
------------------------------------
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."

"dyj Orange" a écrit dans le message de groupe de discussion :
4f64774b$0$12498$

Bonjour au groupe,
Sur un très gros fichier Excel (30000-40000 lignes, 40-50 colonnes), je
voudrai faire deux choses:
1. Connaitre la première colonne disponible pour y insérer des infos.
2. Sur une colonne particulière "K", dont les cellules peuvent avoir
plusieurs valeurs, je ne voudrai que conserver les lignes où la cellule
correspondant à la colonne K a pour valeur "couvert".
Je vous remercie pour votre aide.
Avatar
dyj Orange
Je ne suis ni jeune ni inféodé, mais soucieux du cahier des charges de mon
client où une rubrique "Performances" m'impose d'y faire très attention.

"Jacquouille" a écrit dans le message de groupe de discussion :
4f6a1f29$0$7687$

Bonsoir
Tu dois être bien jeune pour être si inféodé au temps.
Prends le temps de vivre, de respirer, de regarder les fleurs ...pendant que
tourne ta macro. La fin arrivera et plus vite que ce que tu ne crois.
Perso, et si j'ai bien compris, voici ce que je ferais...
Les données sont dans la feuille A. je copie celle-ci en feuille B.
Dans cette feuille, j'efface toutes les lignes dont les cellules de la
colonne x ne répondent pas au critère y.

Pourquoi aller bricoler une colonne supplémentaire, dans laquelle Excel va
mettre le résultat de l'analyse si la cel correspond à une autre, puis un
filtre ?
Pourquoi, dès lors, ne pas filtrer la feuille B sur le même critère?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."

"dyj Orange" a écrit dans le message de groupe de discussion :
4f6a0a3f$0$21472$

Mille excuses pour cet incompréhension. Je vais essayer très plus clair.
Pour augmenter les performance du vba sur une feuille (65000 lignes et 106
colonnes), j'ai trouvé cette solution qui consiste à mettre dans toutes les
cellules de ma 108ième colonne une formule de type "=CountIf(A2:A2,$P$1)"
Ainsi cette colonne est remplie de 1 si ma formule est vraie et 0 si fausse.
Après j'applique un filtre sur cette colonne et je me retrouve dans ma
feuille active avec uniquement les valeurs vraies que je copie ensuite dans
une autre feuille.
Avec une boucle traditionnelle, c'est infernale en temps ... alors qu'avec
ce procédé c'est moins de 10 secondes !!!
J'aimerai si possible ? que cette formule soit dynamique "=CountIf(Ref)" en
ayant au préalable initialisé Ref="A2:A2,$P$1"


"Jacquouille" a écrit dans le message de groupe de discussion :
4f69e0f3$0$7694$

Bonjour
Enfin, quand je dis bon, c'est un euphémisme, car je ne comprends rien, mais
alors là, rien à ta question.
Si tu veux comparer les cellules d'une colonne à la cel A2
-------------------
compt = 0
For Each c In Range("b1:b100")
If [c] = [a2] Then compt = compt + 1
Next
MsgBox compt
------------------

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f69b032$0$21450$

Merci pour toutes ces infos. J'en ai fait des Sub avec passage de
paramètres, mon développement est beaucoup plus clean. Je me heurte à un
problème d'écriture à moins que ce soit impossible. J'insère dans une
colonne vide la formule suivante avec ce code:
With Rg.Offset(, Offset)
'Insertion de la formule pour comparer chaque cellule Lx avec la
cellule A2
.Formula = "=CountIf(DC2:DC2,$EC$1)"
'.Formula = "=CountIf(xR)" ' "=CountIf(A2:A2,$P$1)"
'Fait disparaître la formule pour la valeur 1 si egal ou 0 si
différent
.Value = .Value
End With
Il marche bien, mais comme tu le vois j'ai mis en dur la formule. D'où ma
question: est-il possible d'écrire "=CountIf(MaRef)" MaRef étant initialisé
avant l'appel ?. J'ai fait plusieurs essais sans succès.

"Jacquouille" a écrit dans le message de groupe de discussion :
4f679054$0$7681$

Bonsoir

Vois ceci:

For Each c In Range("a2:a5")
If [c] = 12 Then
c.Interior.ColorIndex = 3
ad = c.Address
LL = c.Row
MsgBox ad
MsgBox "Ligne " & LL
End If
Next

Tu supprimes le msgbox qui ne te convient pas

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f671114$0$21457$

Merci, c'est très performant.
A l'intérieur de ta boucle "For", comment puis je récupérer la ligne de la
l'occurrence trouvée. J'ai déjà la colonne. Je ne suis pas familier avec ce
type d'écriture.


"Jacquouille" a écrit dans le message de groupe de discussion :
4f663c20$0$7688$

Petite correction....;
entre interior et colorIndex, il faut mettre un . (point) et non un
point-virgule (lapsus claviae)
soit:
For each c in range ("a2:a100")
If [c] then c.interior.colorIndex=3
???????? >----------------------------------- je voudrai récupérer le
N° de la ligne
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacquouille" a écrit dans le message de groupe de discussion :
4f662d98$0$7697$

Bonsoir

Le string étant par définition très petit, je préfère m'en passer, voire que
les autres s'en passent aussi.
perso, je me contenterais de ceci......
For each c in range ("a2:a100")
If [c] then c.interior;colorIndex=3
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f65f04f$0$21485$

Merci beaucoup.C'est adapté et inclus dans mon vba.
Du coup je reviens avec une autre question. je cherche une méthode rapide
pour retrouver un string de caractères dans une colonne avec la fonction
suivante:
-----
strChaine="12"
Set rngTrouve = ActiveSheet.Columns(17).Cells.Find( 'what:=strChaine)
----
Si dans cette colonne j'ai les valeurs 1245, 5612, 12, 6912 Il me renvoie la
première occurrence trouvée 1234 (ligne 1)alors que je m'attends à avoir 12
(ligne 3)
Ou est mon erreur de code. Merci

"Jacquouille" a écrit dans le message de groupe de discussion :
4f64b550$0$7685$

Bonjour
La dernière colonne:
Sub Rechercher_la_dernière_colonne()
Range("IV1").Select
Selection.End(xlToLeft).Select
End Sub
----------------------------
Supprimer les lignes dont la cellule K est différente de "couvert"
La ligne 1 est réservée au titre de colonne.

Sub Je_supprime_ligne()
For i = [K65536].End(3).Row To 2 Step -1
For Each c In Range("K2:K" & i)
If Range("K" & i).Value <> "couvert" Then Rows(i).Delete
Next
Next
End Sub
------------------------------------
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."

"dyj Orange" a écrit dans le message de groupe de discussion :
4f64774b$0$12498$

Bonjour au groupe,
Sur un très gros fichier Excel (30000-40000 lignes, 40-50 colonnes), je
voudrai faire deux choses:
1. Connaitre la première colonne disponible pour y insérer des infos.
2. Sur une colonne particulière "K", dont les cellules peuvent avoir
plusieurs valeurs, je ne voudrai que conserver les lignes où la cellule
correspondant à la colonne K a pour valeur "couvert".
Je vous remercie pour votre aide.
Avatar
Yopop
"dyj Orange" a écrit dans le message de groupe de discussion :
4f6a0a3f$0$21472$

Mille excuses pour cet incompréhension. Je vais essayer très plus clair.
Pour augmenter les performance du vba sur une feuille (65000 lignes et 106
colonnes), j'ai trouvé cette solution qui consiste à mettre dans toutes les
cellules de ma 108ième colonne une formule de type "=CountIf(A2:A2,$P$1)"
Ainsi cette colonne est remplie de 1 si ma formule est vraie et 0 si
fausse.
Après j'applique un filtre sur cette colonne et je me retrouve dans ma
feuille active avec uniquement les valeurs vraies que je copie ensuite dans
une autre feuille.
Avec une boucle traditionnelle, c'est infernale en temps ... alors qu'avec
ce procédé c'est moins de 10 secondes !!!
J'aimerai si possible ? que cette formule soit dynamique "=CountIf(Ref)" en
ayant au préalable initialisé Ref="A2:A2,$P$1"




Bonjour,

tu peux le faire, mais avec 2 variables au lieu d'une :

Ref1="A2:A2"
Ref2="$P$1"

=CountIf(Indirect(Ref1),Indirect(Ref2))

j-p
Avatar
dyj Orange
Merci, c'est ce que je fais. En fait mon problème venait du fait que
l'initialisation de mes Refx était faite en dehors de mon With....End With
où se situee mon .Formula


"Yopop" a écrit dans le message de groupe de discussion :
4f6c6219$0$12489$

"dyj Orange" a écrit dans le message de groupe de discussion :
4f6a0a3f$0$21472$

Mille excuses pour cet incompréhension. Je vais essayer très plus clair.
Pour augmenter les performance du vba sur une feuille (65000 lignes et 106
colonnes), j'ai trouvé cette solution qui consiste à mettre dans toutes
les
cellules de ma 108ième colonne une formule de type "=CountIf(A2:A2,$P$1)"
Ainsi cette colonne est remplie de 1 si ma formule est vraie et 0 si
fausse.
Après j'applique un filtre sur cette colonne et je me retrouve dans ma
feuille active avec uniquement les valeurs vraies que je copie ensuite
dans
une autre feuille.
Avec une boucle traditionnelle, c'est infernale en temps ... alors qu'avec
ce procédé c'est moins de 10 secondes !!!
J'aimerai si possible ? que cette formule soit dynamique "=CountIf(Ref)"
en
ayant au préalable initialisé Ref="A2:A2,$P$1"




Bonjour,

tu peux le faire, mais avec 2 variables au lieu d'une :

Ref1="A2:A2"
Ref2="$P$1"

=CountIf(Indirect(Ref1),Indirect(Ref2))

j-p
Avatar
LSteph
Bonjour,

:o))
Cela mérite une intervention que n'aurait pas manqué son éminence.
Le string étant par définition très petit, je préfère m'en pass er,



Il me semble que de toutes façons avec où sans et quelle que soit la
taille du string pour mettre ton colorindex à l'interior il faille
passer par ce point
et non passer par le point virgule...


--
LSteph

On Mar 18, 8:48 pm, "Jacquouille" wrote:
Petite correction....;
entre interior et colorIndex, il faut mettre un . (point) et non un
point-virgule (lapsus claviae)
soit:
For each c in range ("a2:a100")
  If [c] then c.interior.colorIndex=3
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacquouille"  a écrit dans le message de groupe de discussion :
4f662d98$0$7697$

Bonsoir

Le string étant par définition très petit, je préfère m'en pass er, voire que
les autres s'en passent aussi.
perso, je me contenterais de ceci......
For each c in range ("a2:a100")
  If [c] then c.interior;colorIndex=3
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange"  a écrit dans le message de groupe de discussion :
4f65f04f$0$21485$

Merci beaucoup.C'est adapté et inclus dans mon vba.
Du coup je reviens avec une autre question. je cherche une méthode rapi de
pour retrouver un string de caractères dans une colonne avec la fonctio n
suivante:
-----
strChaine="12"
Set rngTrouve = ActiveSheet.Columns(17).Cells.Find( 'what:=strChaine)
----
Si dans cette colonne j'ai les valeurs 1245, 5612, 12, 6912 Il me renvoie la
première occurrence trouvée 1234 (ligne 1)alors que je m'attends à avoir 12
(ligne 3)
Ou est mon erreur de code. Merci

"Jacquouille"  a écrit dans le message de groupe de discussion :
4f64b550$0$7685$

Bonjour
La dernière colonne:
Sub Rechercher_la_dernière_colonne()
    Range("IV1").Select
    Selection.End(xlToLeft).Select
End Sub
----------------------------
Supprimer les lignes dont la cellule K est différente de "couvert"
La ligne 1 est réservée au titre de colonne.

Sub Je_supprime_ligne()
    For i = [K65536].End(3).Row To 2 Step -1
        For Each c In Range("K2:K" & i)
            If Range("K" & i).Value <> "couvert" Then Rows(i) .Delete
        Next
    Next
End Sub
------------------------------------
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."

"dyj Orange"  a écrit dans le message de groupe de discussion :
4f64774b$0$12498$

Bonjour au groupe,
Sur un très gros fichier Excel (30000-40000 lignes, 40-50 colonnes), je
voudrai faire deux choses:
1. Connaitre la première colonne disponible pour y insérer des infos.
2. Sur une colonne particulière "K", dont les cellules peuvent avoir
plusieurs valeurs, je ne voudrai que conserver les lignes où la cellule
correspondant à la colonne K a pour valeur "couvert".
Je vous remercie pour votre aide.
Avatar
Jacquouille
Héhé

Manque plus que Maude, Jacky et Siesting Hoax et l'équipe sera au complet.

Dis-moi, douce gourmande, au n° 13 de ta rue, est-ce toujours un building ?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"LSteph" a écrit dans le message de groupe de discussion :


Bonjour,

:o))
Cela mérite une intervention que n'aurait pas manqué son éminence.
Le string étant par définition très petit, je préfère m'en passer,



Il me semble que de toutes façons avec où sans et quelle que soit la
taille du string pour mettre ton colorindex à l'interior il faille
passer par ce point
et non passer par le point virgule...


--
LSteph

On Mar 18, 8:48 pm, "Jacquouille" wrote:
Petite correction....;
entre interior et colorIndex, il faut mettre un . (point) et non un
point-virgule (lapsus claviae)
soit:
For each c in range ("a2:a100")
If [c] then c.interior.colorIndex=3
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacquouille" a écrit dans le message de groupe de discussion :
4f662d98$0$7697$

Bonsoir

Le string étant par définition très petit, je préfère m'en passer, voire
que
les autres s'en passent aussi.
perso, je me contenterais de ceci......
For each c in range ("a2:a100")
If [c] then c.interior;colorIndex=3
Next

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"dyj Orange" a écrit dans le message de groupe de discussion :
4f65f04f$0$21485$

Merci beaucoup.C'est adapté et inclus dans mon vba.
Du coup je reviens avec une autre question. je cherche une méthode rapide
pour retrouver un string de caractères dans une colonne avec la fonction
suivante:
-----
strChaine="12"
Set rngTrouve = ActiveSheet.Columns(17).Cells.Find( 'what:=strChaine)
----
Si dans cette colonne j'ai les valeurs 1245, 5612, 12, 6912 Il me renvoie
la
première occurrence trouvée 1234 (ligne 1)alors que je m'attends à avoir
12
(ligne 3)
Ou est mon erreur de code. Merci

"Jacquouille" a écrit dans le message de groupe de discussion :
4f64b550$0$7685$

Bonjour
La dernière colonne:
Sub Rechercher_la_dernière_colonne()
Range("IV1").Select
Selection.End(xlToLeft).Select
End Sub
----------------------------
Supprimer les lignes dont la cellule K est différente de "couvert"
La ligne 1 est réservée au titre de colonne.

Sub Je_supprime_ligne()
For i = [K65536].End(3).Row To 2 Step -1
For Each c In Range("K2:K" & i)
If Range("K" & i).Value <> "couvert" Then Rows(i).Delete
Next
Next
End Sub
------------------------------------
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."

"dyj Orange" a écrit dans le message de groupe de discussion :
4f64774b$0$12498$

Bonjour au groupe,
Sur un très gros fichier Excel (30000-40000 lignes, 40-50 colonnes), je
voudrai faire deux choses:
1. Connaitre la première colonne disponible pour y insérer des infos.
2. Sur une colonne particulière "K", dont les cellules peuvent avoir
plusieurs valeurs, je ne voudrai que conserver les lignes où la cellule
correspondant à la colonne K a pour valeur "couvert".
Je vous remercie pour votre aide.
1 2