Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur de formation
    Inscrit en
    janvier 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de formation
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2018
    Messages : 7
    Points : 4
    Points
    4

    Par défaut Recherche d'un texte et suppression de presque toutes les lignes au dessus

    Bonjour la communauté ,

    Je cherche à automatiser via mon code VBA, lors d'une intégration d'un onglet dans un fichier, la recherche dans la 1ere colonne du texte XXX, et une fois trouver il faut supprimer les lignes du dessus moins 1. Pour essayée d'être claire quand j'importe mon onglet le texte XXX peut se trouver sur la 15eme, la 18eme voire une autre ligne. Je cherche un code me permettant donc d'effacer les lignes (qui ne me sont pas utile) au dessus de celle où XXX se trouve sauf la ligne juste au dessus, la 14ème ou la 17eme soit ligneXXX-1 dans les cas cités ci avant.
    Auriez vous quelques idées et solutions ?
    D'avance merci .

  2. #2
    Membre expert Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 648
    Points : 3 271
    Points
    3 271

    Par défaut

    Bonsoir Sarmat,

    As-tu au moins un début de code à soumettre?

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  3. #3
    Candidat au Club
    Femme Profil pro
    Ingénieur de formation
    Inscrit en
    janvier 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de formation
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2018
    Messages : 7
    Points : 4
    Points
    4

    Par défaut

    Bonjour MarcelG,
    Alors oui j'ai un code (qui ne fonctionne pas) car il me supprime toute les lignes qui ne contiennent pas "XXX".
    Le voici (soyez gentil je débute) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub commandbutton1_click()
     
    Dim i%
    For i = 2000 To 1 Step -1
         If Cells(i, 1).Value <> "XXX" Then Rows(i).EntireRow.Delete
    Next i
     
    end sub
    Je souhaiterai qu'il s'arrête à la première ligne où il trouve ce texte à minima et encore mieux juste à la ligne avant.

  4. #4
    Membre expert Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 648
    Points : 3 271
    Points
    3 271

    Par défaut

    Bonjour Sarmat,

    Le voici (soyez gentil je débute) :
    Ne t'inquiète pas, nous passons tous par ce stade.

    Au demeurant, merci de baliser le code retourné par les bornes #.

    La méthode Find explicitée ici retourne un objet Range.
    Il suffit alors de supprimer les lignes depuis la ligne de cet objet - 1 jusqu'à celle de départ en reculant d'une occurrence.

    Tu traduis ce paragraphe en VBA et tu n'hésites pas à revenir.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  5. #5
    Candidat au Club
    Femme Profil pro
    Ingénieur de formation
    Inscrit en
    janvier 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de formation
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2018
    Messages : 7
    Points : 4
    Points
    4

    Par défaut

    J'ai aussi essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub commandbutton1_click()
    Dim i As Integer
     With ThisWorkbook.Sheets("Feuil1")
    'Précisez le nom de votre feuille
                For i = .Range("A" & .Rows.Count).End(xlUp).Row To 1 Step -1
    'je travaille sur la colonne a
     'Rows.count permet de retourner le nombre de ligne de la plage range
                            If .Range("a" & i).Value <> "XXX" Then
                                       .Rows(i).Delete
                            End If
                Next i
     End With
     End Sub
    Là il supprime aussi tout !

  6. #6
    Débutant  
    Avatar de patricktoulon
    Homme Profil pro
    cuisiniste
    Inscrit en
    avril 2009
    Messages
    13 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 13 637
    Points : 20 360
    Points
    20 360
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par Sarmat31 Voir le message
    Bonjour la communauté ,

    Je cherche à automatiser via mon code VBA, lors d'une intégration d'un onglet dans un fichier, la recherche dans la 1ere colonne du texte XXX, et une fois trouver il faut supprimer les lignes du dessus moins 1. Pour essayée d'être claire quand j'importe mon onglet le texte XXX peut se trouver sur la 15eme, la 18eme voire une autre ligne. Je cherche un code me permettant donc d'effacer les lignes (qui ne me sont pas utile) au dessus de celle où XXX se trouve sauf la ligne juste au dessus, la 14ème ou la 17eme soit ligneXXX-1 dans les cas cités ci avant.
    Auriez vous quelques idées et solutions ?
    D'avance merci .
    Bonjour
    somme toute si j'ai bien compris ton exposé
    on supprime les lignes au dessus de "XXX" a partire de l'offset(-1) de "XXX"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    with activesheet
    Set plage = .Range("A1", .Cells(Rows.Count, 1).End(xlUp))
    Set c = plage.Find("XXX", lookat:=xlWhole)
    If Not c Is Nothing Then .Range("A1", c.Offset(-1)).EntireRow.Delete
    end with
    End Sub
    il te sera tres facile d'en faire une fonction generique a fin de l'avoir a dispo pour autre chose que "XXX"

    edit:
    c'etait -2
    avec un interface avec un inputbox en restant une sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub delete_row_before_shearch()
        Dim chaine, c As Range
        chaine = InputBox("tapez l'object de votre recherche", "recherche d'expression")
        If chaine <> "" Then
            Set plage = Range("A1", Cells(Rows.Count, 1).End(xlUp))
            Set c = plage.Find(chaine, lookat:=xlWhole)
            If Not c Is Nothing Then Range("A1", c.Offset(-2)).EntireRow.Delete
        End If
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre expert Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 648
    Points : 3 271
    Points
    3 271

    Par défaut

    Salut Patrick,

    Excuse-moi mais je ne vois pas en quoi ta procédure diffère de la mienne.
    Juste un détail:
    En fin de procédure, je libère les variables affectées à des objets.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  8. #8
    Candidat au Club
    Femme Profil pro
    Ingénieur de formation
    Inscrit en
    janvier 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de formation
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2018
    Messages : 7
    Points : 4
    Points
    4

    Par défaut

    Merci à vous 2,

    donc au final mon code qui fonctionne exactement comme je voulais est celui-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim chaine, c As Range
    Dim plage
        chaine = ("XXX")
        If chaine <> "" Then
            Set plage = Range("A1", Cells(Rows.Count, 1).End(xlUp))
            Set c = plage.Find(chaine, lookat:=xlWhole)
            If Not c Is Nothing Then Range("A1", c.Offset(-2)).EntireRow.Delete
        End If
    j'ai supprimé l'inputbox dont je n'avais pas besoin.
    Encore MERCI.

  9. #9
    Membre expert Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 648
    Points : 3 271
    Points
    3 271

    Par défaut

    Salut,

    Plusieurs remarques.
    1 - On ne saurait trop conseiller de déclarer des variables autrement qu'en Variant.
    Dans 99% des cas, la précision de cette déclaration peut servir à la saisie du code.
    (Au passage, ceci est vrai pour les dictionnaires trop souvent déclarés en Variant)

    2 -

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chaine = ("XXX")
     If chaine <> "" Then
    Là,

    3 - Autre conseil, rattacher les objets Range permet de clarifier le code. Pour ce faire, le bloc With peut être utile.

    4 - Il est d'usage de baliser tout code reporté par les bornes #.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  10. #10
    Candidat au Club
    Femme Profil pro
    Ingénieur de formation
    Inscrit en
    janvier 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de formation
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2018
    Messages : 7
    Points : 4
    Points
    4

    Par défaut

    MarcelG,
    Ok pour le point 4 j'ai compris.
    Le point 2 en effet en l'écrivant je me suis dit qu'il y avait un loup mais ça à fonctionné et je ne sais pas pourquoi du coup !
    Le point 3 je vais chercher dans ce sens.
    En revanche ton point 1 ? pas compris !
    En tout cas merci de prendre le temps de répondre et d'aiguiller les novices !

  11. #11
    Membre expert Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 648
    Points : 3 271
    Points
    3 271

    Par défaut

    Bonjour Sarmat, Bonjour le Forum,

    Déclarer une variable en variant, c'est à dire sans précision aucune, peut entrainer des erreurs (méthode non gérée par cet objet...).
    En préciser la nature permet de mieux maitriser le code et d'avoir accès aux méthodes et propriétés plus facilement lors de la saisie (dès le "." de rattachement informé).

    Tutoriel à consulter: les variables par Silkyroad.

    Bonne continuation.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression toutes les lignes d'un fichier.log
    Par Fedox dans le forum Fichiers
    Réponses: 2
    Dernier message: 02/08/2009, 22h36
  2. CSS texte qui se répète sur toutes les pages
    Par drogba-11 dans le forum Mise en page CSS
    Réponses: 24
    Dernier message: 13/05/2007, 22h49
  3. Boucle qui parcourt tout les ligne d'un fichier text
    Par accro-macro dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 10/05/2007, 21h21
  4. Réponses: 16
    Dernier message: 07/08/2006, 14h11
  5. Socket:Envoyer du texte d'un serveur vers tout les clients
    Par cedm78 dans le forum Web & réseau
    Réponses: 7
    Dernier message: 01/08/2002, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo