Suppression lignes vides Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
zarik
Membre fidèle
Membre fidèle
Messages : 268
Appréciation reçue : 1
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par zarik » 15 avril 2014, 15:45

Donc, ton fichier a des macros et des feuilles partout, je me suis perdu... :oops:
Par consequent, j't'ai fait un fichier avec une copie de ta feuille "Export Elec"(juste les valeurs)
et 2 systeme de recherche:
- 1 avec la recherche en fonction d'une cellule(quelque explications sur la feuille) qui envoie les reponse en "export Liste"
- 1 avec une boucle qui n'a que 2 criteres de recherche(quelque explications dans le code)qui envoie les reponse en "export Multi"

je te laisse adapter.
VirginieV.xlsm
(31.12 Kio) Téléchargé 19 fois
Mieux vaut allumer une bougie que maudire les ténèbres.
V
VirginieV
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 4 avril 2014
Version d'Excel : 2007 PC

Message par VirginieV » 17 avril 2014, 16:39

Bonjour Zarik,
Juste un petit mot pour te tenir au courant...
C'est bon ca fonctionne même si j'ai un peu galéré avec mes macros imbriquées les unes aux autres :(
Maintenant je n'ai plus qu'à continuer et vérifer que cela fonctionne dans tous les cas selon l'export donné.
A bientôt
Virginie
Avatar du membre
zarik
Membre fidèle
Membre fidèle
Messages : 268
Appréciation reçue : 1
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par zarik » 17 avril 2014, 16:41

C'est bon ca fonctionne même si j'ai un peu galéré avec mes macros imbriquées les unes aux autres
Ca arrive souvent pour se simplifier la vie :wink:
Maintenant je n'ai plus qu'à continuer et vérifer que cela fonctionne dans tous les cas selon l'export donné.
bon courage :D
Mieux vaut allumer une bougie que maudire les ténèbres.
V
VirginieV
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 4 avril 2014
Version d'Excel : 2007 PC

Message par VirginieV » 18 avril 2014, 13:20

Bonjour,
Tout d'abord, la bonne nouvelle, c'est que maintenant tout marche...Merci pour votre aide...
Je continue à compléter mon fichier afin qu'il soit optimum, forcément ;)
Alors maintenant ma problématique c'est que je souhaiterai que lorsqu'il y a plusieurs noms qui se suivent, ils ne me fassent remonter les données que du dernier nom qu'il trouve...
Exemple de mon export :
DUPONT
DURANT
SOLEIL
il faudrait qu'il me remonte que les données de la ligne "SOLEIL"...et bien sûr il faut arriver à l'intégrer dans ma macros existantes qui devient franchement complexe pour moi : J'ai mis en rouge un des tests que j'ai fait mais qui ne fonctionne pas, bien sûr :(

Merci encore pour votre aide !
A bientôt
Virginie

Sub rechercheelec()
Sheets("Données elec").Activate
'supprimer les anciennes valeurs
lignemax = Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("a2:e" & lignemax).Clear
lignemax = Cells(Rows.Count, 1).End(xlUp).Row + 1
Sheets("Export Elec").Activate
Cells.Replace What:="`", Replacement:="'", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
'recherche multiple "type releve"

Sheets("Données Elec").Activate
Lignemax2 = Cells(Rows.Count, 1).End(xlUp).Row + 1 'premiere ligne vide

Sheets("Export Elec").Activate
lignemax = Cells(Rows.Count, 1).End(xlUp).Row 'derniere ligne pleine

For i = 16 To lignemax 'pour i = 16 jusqu'a Lignemax
'si... cellule(i,"K")= "X" ou cellule(i,"K")= "Y" ...alors
If Cells(lignemax<>lignemax-1=False
End If
If Cells(i, "K").Value = "RELEVE NORMALE" Or Cells(i, "K").Value = "INDEX DE DEPART" Or Cells(i, "K").Value = "AVANT CHANG. COMPTEUR" Or Cells(i, "K").Value = "APRES CHANG. COMPTEUR" Then
'ligne(i).copier feuille("export...").cellule("A" & Lignemax2)
Rows(i).Copy Sheets("Données Elec").Range("A" & Lignemax2)
Lignemax2 = Lignemax2 + 1
End If '...fin d'if
Next i


Sheets("etude conso Clients Elec").Activate
End Sub
Avatar du membre
zarik
Membre fidèle
Membre fidèle
Messages : 268
Appréciation reçue : 1
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par zarik » 18 avril 2014, 13:28

J'ai mis en rouge un des tests que j'ai fait mais qui ne fonctionne pas, bien sûr
je t'avouerais que je comprends pas ce qu'il est censé faire ce IF...

si tu souhaite remonté la derniere ligne: Rows(lignemax)
Mieux vaut allumer une bougie que maudire les ténèbres.
V
VirginieV
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 4 avril 2014
Version d'Excel : 2007 PC

Message par VirginieV » 18 avril 2014, 13:52

Bonjour Zarik,
Non je ne veux pas qui me remonte la dernière ligne mais qu'en 1er critère, il fasse la recherche du nom par le bas et qu'il me remonte toutes les lignes qui portent le même nom...pouis en 2ème critère il me remonte "releve normale"...etc, mais ca, c'est bon la macro le fait maintenant grace à ton aide ;)
@+
PS : Au fait, t'es toujours connecté ??!!!
Avatar du membre
zarik
Membre fidèle
Membre fidèle
Messages : 268
Appréciation reçue : 1
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par zarik » 18 avril 2014, 14:03

1er critère, il fasse la recherche du nom par le bas et qu'il me remonte toutes les lignes qui portent le même nom...pouis en 2ème critère il me remonte "releve normale".
Ok donc 2 if imbriqués
Au fait, t'es toujours connecté ??!!!
bcp de temps libre ces derniers temps, c'est pour ca que je me suis mis au vba :wink:
Mieux vaut allumer une bougie que maudire les ténèbres.
V
VirginieV
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 4 avril 2014
Version d'Excel : 2007 PC

Message par VirginieV » 18 avril 2014, 14:50

Ok zarik, 2if imbriqué !!!
Donc si je reprends ma formule avec multi recherche qui me permettait de faire remonter les lignes dès lors que dans une colonne X il trouvait une valeur, comment faire pour lui dire de faire tout d'abord une recherche par la fin de la colonne A , et de s'arreter dès que le nom diffère?? Car dans ma nouvelle condition, je ne veux pas que la cellule soit = à une nouvelle valeur car la valeur va changer à chaque nouvel export
Si je reprend mon exemple

DUPONT - RELEVE NORMALE - X - Y - Z
DUPONT - INTERM MENS - X - Y - Z
DUPONT - RELEVE NORMALE - X - Y - Z
DURANT - INDEX DEPART - X - Y - Z
DURANT - INDEX FIN - X - Y - Z
SOLEIL - RELEVE NORMALE - X - Y - Z
SOLEIL - INTERM EST - X - Y - Z
SOLEIL - INTERM EST - X - Y - Z
SOLEIL - RELEVE NORMALE - X - Y - Z

Je voudrais qu'il me fasse remonter :
SOLEIL - INDEX DEPART - X - Y - Z
SOLEIL - RELEVE NORMALE - X - Y - Z

La macro recherche multiple me fait bien remonter uniquement les lignes avec les conditions "releve normale, index départ..." comme demande mais après pour expliquer à la bête qu'il doit me faire remonter que le dernier nom, ca ???
@+


For i = 16 To lignemax 'pour i = 16 jusqu'a Lignemax
'si... cellule(i,"K")= "X" ou cellule(i,"K")= "Y" ...alors
If Cells(i, "K").Value = "RELEVE NORMALE" Or Cells(i, "K").Value = "INDEX DE DEPART" Or Cells(i, "K").Value = "AVANT CHANG. COMPTEUR" Or Cells(i, "K").Value = "APRES CHANG. COMPTEUR" Then
'ligne(i).copier feuille("export...").cellule("A" & Lignemax2)
Rows(i).Copy Sheets("Données Elec").Range("A" & Lignemax2)
Lignemax2 = Lignemax2 + 1
End If '...fin d'if
Next i
Avatar du membre
zarik
Membre fidèle
Membre fidèle
Messages : 268
Appréciation reçue : 1
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par zarik » 18 avril 2014, 15:11

s'arreter dès que le nom diffère??
des que tu passe de dupont a durand, il dois s'arreter....un tri par client en fait?
Apres "for" et avant "if de recherche":
For i = 16 To lignemax 'pour i = 16 jusqu'a Lignemax
if cell(i,"A").value<>cell(i+1,"A").value then 'si...cellule x est differente de cellule x+1...alors
'code si vrai(=changement de nom): changer de feuille, mettre une ligne vide ou "Exit sub" pour arreter le traitement
else
'code si faux
If Cells(i, "K").Value = "RELEVE NORMALE" Or Cells(i, "K").Value = "INDEX DE DEPART" Or Cells(i, "K").Value = "AVANT CHANG. COMPTEUR" Or Cells(i, "K").Value = "APRES CHANG. COMPTEUR" Then
'ligne(i).copier feuille("export...").cellule("A" & Lignemax2)
Rows(i).Copy Sheets("Données Elec").Range("A" & Lignemax2)
Lignemax2 = Lignemax2 + 1
End If '...fin d'if
end if '
Next i
edit end if manquant
Mieux vaut allumer une bougie que maudire les ténèbres.
V
VirginieV
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 4 avril 2014
Version d'Excel : 2007 PC

Message par VirginieV » 18 avril 2014, 15:55

Zarik,
Je suis désolé mais je débute vraiment dans VBA, et cela ne marche pas sans que je saches trouver pourquoi???
Voilà, la reproduction de ce que tu me proposes :

For i = 16 To lignemax 'pour i = 16 jusqu'a Lignemax
If Cells(i, "B").Value <> Cells(i + 1, "B").Value Then
Else
'si... cellule(i,"K")= "X" ou cellule(i,"K")= "Y" ...alors
If Cells(i, "K").Value = "RELEVE NORMALE" Or Cells(i, "K").Value = "INDEX DE DEPART" Or Cells(i, "K").Value = "AVANT CHANG. COMPTEUR" Or Cells(i, "K").Value = "APRES CHANG. COMPTEUR" Then
'ligne(i).copier feuille("export...").cellule("A" & Lignemax2)
Rows(i).Copy Sheets("Données Elec").Range("A" & Lignemax2)
Lignemax2 = Lignemax2 + 1
End If '...fin d'if
End If
Next i

Et voici un extrait du résultat :
MR FOURNIER GEORGES RELEVE NORMALE 13/12/2004
MR FOURNIER GEORGES RELEVE NORMALE 13/12/2004 17/09/2005
MME FOURNIER CHRISTELLE INDEX DE DEPART 17/09/2005 09/12/2005
MME FOURNIER CHRISTELLE RELEVE NORMALE 09/12/2005 13/06/2006
MR ET MME CROSS MIKE RELEVE NORMALE 13/06/2006 05/10/2006
MR ET MME CROSS MIKE INDEX DE DEPART 05/10/2006 13/12/2006
MR ET MME CROSS MIKE RELEVE NORMALE 13/12/2006 15/06/2007
M.MME BASTINGS FRANS INDEX DE DEPART 15/06/2007 03/12/2007
M.MME BASTINGS FRANS RELEVE NORMALE 03/12/2007 19/12/2008
M ET MME AYLWIN DAVID RELEVE NORMALE 19/12/2008 01/12/2009
MME BERNARD COLETTE INDEX DE DEPART 01/12/2009 10/12/2010
MME BERNARD COLETTE RELEVE NORMALE 10/12/2010 09/12/2011
MME BERNARD COLETTE RELEVE NORMALE 09/12/2011 12/12/2012
MME BERNARD COLETTE RELEVE NORMALE 12/12/2012 05/12/2013
MME GAETANI-LISEO INDEX DE DEPART 05/12/2013 09/04/2014
MME GAETANI-LISEO INDEX INTERM. ESTIME 09/04/2014 16/07/2008
CHG. COMM. DEPART 16/07/2008 11/08/2008
INDEX INTERM. ESTIME 11/08/2008 10/10/2008
INDEX INTERM. ESTIME 10/10/2008 19/12/2008
RELEVE NORMALE 19/12/2008 01/12/2009
INDEX DE DEPART 01/12/2009 15/06/2010

Donc là, il me vire le premier nom qu'il trouve (et non, en prenant la liste par le bas) et remonte toutes les lignes (donc ne prends plus en compte le 2ème tri.....Grrrr !!!

Help !

Zarik,
j'ai peut-être compris le problème...Peux tu me dire comment je peux modifier la valeur de "lignemax" car je m'apperçois que dans le nettoyage du fichier, il nettoie que jusqu'à la ligne11???
Merci
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message