Suppression lignes vides

Donc, ton fichier a des macros et des feuilles partout, je me suis perdu...

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.

21virginiev.xlsm (31.12 Ko)

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

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

Maintenant je n'ai plus qu'à continuer et vérifer que cela fonctionne dans tous les cas selon l'export donné.

bon courage

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

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)

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é ??!!!

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

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

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

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

Bon ca y est j'ai réussi à relancer la macro correctement... Du coup, il me remonte bien les lignes complètes et uniquement si il y a écrit "releve normale, index depart..."

Par contre j'ai toujours mon souci pour arriver à ne faire remonter que les lignes correspondants au dernier nom de la liste

Merci d'avance pour l'aide

For i = 16 To lignemax 'pour i = 16 jusqu'a Lignemax
'si...(la derniere cellule = la cellule en cours) et (cellule(i,"K")= "X" ou cellule(i,"K")= "Y") ...alors
If (Cells(lignemax,"B")=cells(i,"B"))and(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

Bon dsl pour le temps perdu mais j'ai un peu de mal ajd.

Essaye cette version

Tu plaisantes, Zarik...

Merci Merci Merci de m'aider Je suis trop perdu dans mes nouvelles taches et en même temps c'est super intéressant !!!

Résultat ca marche :)

Je vais faire plusieurs recettages maintenant pour vérifier que ca fonctionne à tous les coups !!!

Encore merci beaucoup pour ton aide

A bientôt

Virginie

Bonjour,

Juste pr info, après de nombreux recettages et quelques réadaptation afin que mon petit outil fonctionne dans tous les cas, ça y est il est terminé...

Merci à ceux qui m ont aidé à en venir à bout et notamment à zarik bien sur;)

A bientôt

Virginie

Rechercher des sujets similaires à "suppression lignes vides"