VBA

Bonjour,

Novice VBA, j'ai une petite requête à faire:

Sur ma colonne J
Si cellule = Toto et si la cellule precedente est vide alors je remonte la cellule.

Je sais pas si je suis clair
Merci

4 réponses

  1. Modérateur
    Bonjour,
    1- Attention avec les codes qui utilisent "delete"... Venant d'un forum, on ne sait pas trop le résultat obtenu.
    2- Si vous me faites confiance malgré tout, travaillez d'abord sur une copie de votre fichier. Pour cela, ouvrez le, Fichier/Enregistrer sous, appelez le "test_toto.xls" et enregistrez. Travailler toujours sur une copie AVANT. Ben oui, après c'est trop tard...
    3- Essayez ce code (à placer dans un module standard) :
    Sub Supprime_si_prec_vide() 
    Dim Lig As Long, DernierLig As Long 
    
    DernierLig = Sheets("Feuil1").Range("J65536").End(xlUp).Row 
    For Lig = 2 To DernierLig 
        If Cells(Lig, 10).Value = "toto" And Cells(Lig - 1, 10).Value = "" Then 
            Cells(Lig - 1, 10).Delete Shift:=xlUp 
            'pour supprimer toute la ligne faire : 
            'Cells(Lig - 1, 10).EntireRow.Delete 
        End If 
    Next 
    
    End Sub

    Sheets("Feuil1") à adapter en remplaçant Feuil1 par le nom de la feuille concernée.
    "Laissez-moi deviner... Votre surnom, c'est «Bande Passante»? "
    - Le Tribunal des flagrants délires- P.Desproges -
    1. Merci pijaku,

      j'ai 2 petits pb avec ce code:

      - La feuille concernée ne porte jamais le même nom, donc je peux pas la renomée de manière fixe.

      - La cellule Toto remonte bien mais le problème est que tout les reste de la colonne est remonter aussi, or je voudrais remonte que la cellule contenant Toto sans que le reste en bas bouge...

      Merci pour ton aide
      1. Modérateur
        Yes!!!
        Alors essaye ce code qui devrait résoudre tes 2 problèmes. Toujours sur une copie de ton fichier!!!!!!!!
        Sub remonte_d_une_ligne_si_toto()
        Dim Lig As Long, DernierLig As Long

        DernierLig = ActiveSheet.Range("J65536").End(xlUp).Row
        For Lig = 2 To DernierLig
        If Cells(Lig, 10).Value = "toto" And Cells(Lig - 1, 10).Value = "" Then
        Cells(Lig - 1, 10).Value = Cells(Lig, 10).Value
        Cells(Lig, 10).Value = ""
        End If
        Next

        End Sub
    2. Super!!!
      ça marche!!! merci Bcp

      J'ai encore une dernière requête please...

      Colonne A

      toto > riri
      toto1 > fifi
      toto2 > loulou

      je voudrais supprimer à chaque fois .....> et laisser que
      riri
      fifi
      loulou

      Merci
      1. Modérateur
        tu as le signe : > ou pas?...
    3. oui j'ai tout le temps ce signe.
      1. Modérateur
        Salut,
        Si tu as un espace après le > alors ne touche à rien, ce code est bon. Par contre, si tu n'as pas d'espace, retire le - 1 dans la ligne :
        Cells(Lig, 1).Value = Right(Cells(Lig, 1).Value, Len(Cells(Lig, 1).Value) - InStr(Cells(Lig, 1).Value, ">") - 1)

        Sub Riri_fifi_loulou() 
        Dim Lig As Long, DernierLig As Long 
        
        DernierLig = ActiveSheet.Range("A65536").End(xlUp).Row 
        For Lig = 2 To DernierLig 
        If InStr(Cells(Lig, 1).Value, ">") <> 0 Then 
            Cells(Lig, 1).Value = Right(Cells(Lig, 1).Value, Len(Cells(Lig, 1).Value) - InStr(Cells(Lig, 1).Value, ">") - 1) 
        End If 
        Next 
        End Sub

        Et en cadeau : un super site, qui contient notamment manipuler une chaine de caractères en VB6 et VBA