IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Macros et VBA Excel Discussion :

Traitement multilignes dans une cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 22
    Par défaut Traitement multilignes dans une cellule
    Hello à tous,

    Tout d'abord bonne année à ceux à qui je ne l'aurais pas souhaité !

    J'aurais besoin de vos lumières (une fois de plus haha). Je dispose d'un fichier excel composé de la façon suivante:
    En cellule A1:
    - Appeler client,
    - Relancer Client,
    - Contrôle factures.

    En cellule B1:
    - terminée,
    - en cours,
    - terminée.

    Je ne parviens pas à coder quelque chose en VBA me permettant de faire:
    Si en cellule B1, l'action terminée est en Ligne 1 alors la supprimé ET supprimé l'action correspondante en A1.
    Ce qui dans l'exemple ci-dessus donnerait le résultat suivant:
    Cellule A1:
    - Relancer client;

    Cellule B1:
    - en cours.

    A cet instant j'ai juste un code qui me permets d'identifier la ligne ou se trouver l'action terminé, mais je n'arrive pas à coder le "rends-toi en cellule A1 et ligne identifié et supprime cette ligne...

    Si vous avez une astuce je suis preneur.

    Merci et bonne journée.
    Edgard

  2. #2
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2023
    Messages : 7
    Par défaut
    Bonjour,

    Lorsque vous supprimez des lignes d'une plage identifiée, il faut commencer par la fin sinon vous allez dans le mur. Je propose la solution suivante (je pars du principe qu'il y a un en-tête de colonne et que les données commencents à la plage A2, sinon, ajustez.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Sub supr_lignes_fin()
     
    With ThisWorkbook.Sheets("base") 'nom de la feuille à mettre ici à la place de base
     
    Dim x As Integer ' ou Long s'il y a vraiment bcp de lignes
     
    ' Step -1 indique qu'il doit compter à l'envers
    ' .end(xldown) renvoie à la dernière ligne de la plage ; .row renvoie le numéro de la ligne
     
    For x = .Range("A1").End(xlDown).Row To 2 Step -1 '2 s'il y a un en-tête de colonne, sinon 1
     
    If .Range("B" & x) = "terminée" Then .Range("B" & x).EntireRow.Delete
     
    Next
     
    End With
     
    End Sub
    Cordialement,

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    657
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 657
    Par défaut
    Bonjour,

    Je ne vais répondre à ta question, mais je te déconseille le multi-ligne dans une cellule Excel, c'est peut-être joli, mais pour du traitement c'est une horreur.

    Je vais quand même te donner une piste.

    Fait un split avec le - comme séparateur de ce qu'il y a dans la cellule, cela te crée un tableau de données et tu peux avoir la position de chaque élément. Ainsi tu pourras faire des tests.

    ONTAYG

  4. #4
    Membre habitué
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Par défaut
    Bonjour Lulah,
    Je pense que ton code ne fonctionnera malheureusement pas (j'ai pas testé).
    En effet, il y'a potentiellement 3 lignes dans la même cellule de ce que j'ai compris.
    A priori donne quelque chose de ce goût là :

    Nom : 2023-01-26 13_57_46-Classeur1 - Excel.jpg
Affichages : 184
Taille : 11,8 Ko

    Sinon il aurait été très bien dans le cas où il n'y aurait pas eu 3 lignes dans la même cellule

    Citation Envoyé par Lulah Voir le message
    Bonjour,

    Lorsque vous supprimez des lignes d'une plage identifiée, il faut commencer par la fin sinon vous allez dans le mur. Je propose la solution suivante (je pars du principe qu'il y a un en-tête de colonne et que les données commencents à la plage A2, sinon, ajustez.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Sub supr_lignes_fin()
     
    With ThisWorkbook.Sheets("base") 'nom de la feuille à mettre ici à la place de base
     
    Dim x As Integer ' ou Long s'il y a vraiment bcp de lignes
     
    ' Step -1 indique qu'il doit compter à l'envers
    ' .end(xldown) renvoie à la dernière ligne de la plage ; .row renvoie le numéro de la ligne
     
    For x = .Range("A1").End(xlDown).Row To 2 Step -1 '2 s'il y a un en-tête de colonne, sinon 1
     
    If .Range("B" & x) = "terminée" Then .Range("B" & x).EntireRow.Delete
     
    Next
     
    End With
     
    End Sub
    Cordialement,

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 22
    Par défaut
    Hello,

    Merci à tous pour votre précieux retour !

    @ONTAYG: Oui, je sais, c'est une horreur de travailler avec ce genre de fichier mais pour l'instant le risque opérationnel lié à une modification dans ce sens est trop important.

    @Lulah: yes; code testé et ne fonctionne pas car la problématique est que la date est comme @flopai l'a présenté...

    Pour info, pour localiser la ligne à laquelle se trouve l'action "complete", j'ai utilisé la fonction split (critère de retour à la ligne avec vbLf) avec Lbunds and Ubunds et lenght.

    Le code en détail est le suivant:

    s = split(range("B2", vbLf)
    maxc = 20 'pour les caractères
    maxi = 20 'pour les interlinges

    for i = Lbound(s) to Ubund(s)
    if len(s(i)) < maxc then

    maxi = i

    msgbox "La phare la plus longue est :" & s(maxc) & vbLf & "en ligne : " & maxi +IIf(Lbunds(s)+ 0,1,0) & "nb caractères " & maxc


    En fait ce code récupère l'emplacement du mot (ou la phrase) ayant le plus petit nombre de caractère.


    Merci

  6. #6
    Membre habitué
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Par défaut
    Salut Edgarrd,

    Citation Envoyé par edgarrd Voir le message
    Hello,

    Le code en détail est le suivant:

    s = split(range("B2", vbLf)
    maxc = 20 'pour les caractères
    maxi = 20 'pour les interlinges

    for i = Lbound(s) to Ubund(s)
    if len(s(i)) < maxc then

    maxi = i
    Merci pour le code.
    J'ai noté quelques erreurs de syntaxe, impossible à compiler en l'état.
    J'ai fait quelques modifications (i.e : Ubund => Ubound)
    Je ne suis pas certains d'avoir compris si tu souhaites supprimer l'ensemble de la ligne si le couple "Appeler client" / "terminée" sont alignée dans les "sous-lignes" des colonnes A & B d'une même ligne.
    Si c'est le cas et que ta syntaxe est rigoureusement la même je pense que c'est faisable.
    Très concrètement, ce que je crois comprendre c'est que tu souhaites supprimer la ligne ou apparait "OK" dans la colonne C de ma capture d'écran infra.
    Est-ce bien ça?
    Si c'est bien le cas je pense que tu peux adapter le code que tu trouvera plus bas pour qu'il supprime la ligne au lieu d'écrire "Ok" ou "Ko" dans la colonne C.

    Nom : 2023-01-27 11_07_56-Test_Multiligne_par_cellule.xlsm - Excel.jpg
Affichages : 137
Taille : 20,3 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    Option Base 0
     
    Sub Test()
     
    Dim s As Variant
    Dim t As Variant
     
    Columns(3).ClearContents
     
    For i = 1 To 3
     
    s = Split(Range("B" & i), vbLf)
    t = Split(Range("A" & i), vbLf)
     
    If (s(0) = "- terminée," And t(0) = "- Appeler client,") Then
    Range("C" & i).Value = "OK"
    Else: Range("C" & i).Value = "KO"
    End If
     
    Next i
     
    End Sub
    En espérant que ça puisse aider.
    Bien à toi

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 22
    Par défaut
    Bonjour Flopai,

    Merci beaucoup pour ton retour. Oui désolé, j'ai écris le bout de code de mémoire et ne me suis pas relu :/
    Pour reprendre ta capture d'écran, je veux que l'action relatif à son statut soit supprimé, si l'action est bien terminé. En résumé, dans ton encadré rouge il faudrait que le texte en rouge disparaisse totalement.
    Tu penses que c'est jouable ?

    Merci

  8. #8
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2023
    Messages : 7
    Par défaut
    Citation Envoyé par Flopai Voir le message
    Bonjour Lulah,
    Je pense que ton code ne fonctionnera malheureusement pas (j'ai pas testé).
    En effet, il y'a potentiellement 3 lignes dans la même cellule de ce que j'ai compris.
    A priori donne quelque chose de ce goût là :

    Nom : 2023-01-26 13_57_46-Classeur1 - Excel.jpg
Affichages : 184
Taille : 11,8 Ko

    Sinon il aurait été très bien dans le cas où il n'y aurait pas eu 3 lignes dans la même cellule
    Bonjour,

    Oui autant pour moi je n'avais pas bien compris la problématique de départ! Merci pour la correction.

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 22
    Par défaut
    Aucun souci, c'est déjà cool d'avoir essayé de m'aider

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 22
    Par défaut
    Hello,

    Rahhh j'y arrive pas...Un petit coup de pouce svp

    Merci

  11. #11
    Membre habitué
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Par défaut
    Bonjour Edgarrd,
    Je suis curieux de savoir comment tu as identifié la ligne ou ton action terminée se trouve dans la cellule?
    Peux-tu m'indiquer comment tu as procédé ça pourra m'être utile un jour ?

    Merci d'avance

    Citation Envoyé par edgarrd Voir le message

    A cet instant j'ai juste un code qui me permets d'identifier la ligne ou se trouver l'action terminé, mais je n'arrive pas à coder le "rends-toi en cellule A1 et ligne identifié et supprime cette ligne...


    Edgard

Discussions similaires

  1. Détecter le retour à la ligne dans une cellule multiligne
    Par justgreat dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/10/2010, 17h26
  2. focus dans une cellule d'une JTable
    Par coil dans le forum Composants
    Réponses: 5
    Dernier message: 07/07/2010, 17h15
  3. Ecrire dans une cellule multiligne
    Par TomSawyer76 dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/07/2008, 19h21
  4. Réponses: 6
    Dernier message: 19/05/2008, 15h39
  5. [VBA-E] Fonction sum() dans une cellule
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/12/2002, 10h18

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