Executer deux tache excel

Résolu
Bonjour mes amis,

J'ai besoin de votre expertise comment puis je executer deux tache excel a savoir: couper les cellule qui demarre par 0 et les coller dans la colonne "C" et les remplacer par Y. Exemple dans les colonnes suivantes:

A/B/C
0a
b
0c
d
le resultat:
A/B/C
y / /0a
b / /
y / /0c
d / /
j'ai couper coller les 0a . 0c dans la colonne C et les remplacer par y

Merci infiniment pour votre aide

Configuration: Windows / Firefox 52.0

2 réponses

Résumé de la discussion

Un échange porte sur l'exécution d'une tâche Excel consistant à déplacer les cellules dont le contenu commence par 0 vers la colonne C et à remplacer l'original par Y. Plusieurs réponses proposent une macro VBA utilisant CountIf pour repérer les cellules commençant par 0 dans la colonne A, puis déplacer leur contenu dans la colonne C et remplacer par y. Des précisions évoquent que les données peuvent commencer en A2 et qu'il faut déterminer la dernière ligne non vide, en testant les cellules avec Like '0*' pour cibler les éléments. Certaines réponses recommandent également de tester sur une copie du fichier et d'utiliser Find pour localiser chaque cellule commencant par 0 avant d'effectuer le déplacement.

Bobot (l’IA à votre service)
  1. Bonjour,

    Sure que ce sont des lettres apres les "0" et la ou y a pas de "0" aussi???????????????????
    1. Oui le mot commence par 0xxxxxxx, le "0" est au debut,

      Merci infiniment
    2. Bonjour,

      Ok, je regarde la chose
    3. Suite:

      Suite
      Une facon de faire

      Sub decoupe()
          With Worksheets("feuil1")
              derlig = .Range("A" & .Rows.Count).End(xlUp).Row        'derniere cellule non vide colonne A
              Set Plage = .Range("A1:A" & derlig)                     'mise en memoire plage de cellules
              Nb = Application.CountIf(Plage, "0*")                   'nombre de fois "0" et lettre
              If Nb > 0 Then
                  For n = 1 To derlig                                 'boucle sur la colonne
                      If nf > Nb Then Exit Sub                        'nombe de fois +1 atteint sortie
                      If Plage(n, 1) Like "0*" Then                   'test cellule
                          Plage(n, 3) = Plage(n, 1): Plage(n, 1) = "y"    'ecriture cellules
                      End If
                      nf = nf + 1                                     'increment pour test
                  Next n
              End If
          End With
          Set Plage = Nothing
      End Sub
      
    4. bonjour, j'ai éxécuté la macro elle fonctionne bien just pour la premiere cellule A1, est ce qu'il est possible qu'elle fonctionne sur toute la colonne A?? merci
    5. Bonjour,

      derlig = .Range("A" & .Rows.Count).End(xlUp).Row  

      Ce code vous donne la ligne de la derniere cellule NON VIDE de la colonne!!!!!!!!!!!!!!!!!!!!!!
  2. Bonjour,

    Est ce que vousn pouvez inserer
    Oui.

    Sub decoupe()
        Dim Plage As Range
        
        With Worksheets("feuil1")
            derlig = .Range("A" & .Rows.Count).End(xlUp).Row        'derniere cellule non vide colonne A
            Set Plage = .Range("A1:A" & derlig)                     'mise en memoire plage de cellules
            Nb = Application.CountIf(Plage, "0*")                   'nombre de fois "0" et lettre
            If Nb > 0 Then
                Memlig = 1
                Do While Application.CountIf(Plage, "0*") > 0                             'boucle sur la colonne
                    lig = .Columns(1).Find("0*", .Cells(Memlig, 1), , xlWhole).Row
                    Memlig = lig
                    Ville = .Cells(lig, 1)
                    Flg_Vide = False
                    CR = Worksheets("Les variables").Columns(1).Find(Ville).Row
                    If Worksheets("Les variables").Cells(CR, 2) = "" Then
                        Flg_Vide = True
                    Else
                        Set CR = Worksheets("Les variables").Columns(1).Find(Ville).Row
                    End If
                    Nb = Application.CountIf(Plage, Ville)
                    If Nb > 0 Then
                        For d = 1 To Nb
                            lig = .Columns(1).Find(Ville, .Cells(lig, 1), , xlWhole).Row
                            If Not Flg_Vide Then
                                .Cells(lig, 3) = .Cells(lig, 1): CR.Offset(, 1).Copy .Cells(lig, 1)
                            Else
                                .Cells(lig, 3) = .Cells(lig, 1): .Cells(lig, 1) = 401100
                            End If
                        Next d
                    End If
                Loop
            End If
        End With
        Set Plage = Nothing
        Set CR = Nothing
    End Sub
    
    1. Re,

      Ben, je regarde

      Suite:

      petit probleme avec definition de CR, corrigé:

      Sub decoupe()
          Dim Plage As Range
          
          With Worksheets("feuil1")
              derlig = .Range("A" & .Rows.Count).End(xlUp).Row        'derniere cellule non vide colonne A
              Set Plage = .Range("A1:A" & derlig)                     'mise en memoire plage de cellules
              Nb = Application.CountIf(Plage, "0*")                   'nombre de fois "0" et lettre
              If Nb > 0 Then
                  Memlig = 1
                  Do While Application.CountIf(Plage, "0*") > 0                             'boucle sur la colonne
                      lig = .Columns(1).Find("0*", .Cells(Memlig, 1), , xlWhole).Row
                      Memlig = lig
                      Ville = .Cells(lig, 1)
                      Flg_Vide = False
                      CR = Worksheets("Les variables").Columns(1).Find(Ville).Row
                      If Worksheets("Les variables").Cells(CR, 2) = "" Then
                          Flg_Vide = True
                      End If
                      Nb = Application.CountIf(Plage, Ville)
                      If Nb > 0 Then
                          For d = 1 To Nb
                              lig = .Columns(1).Find(Ville, .Cells(lig, 1), , xlWhole).Row
                              If Not Flg_Vide Then
                                  .Cells(lig, 3) = .Cells(lig, 1):  Worksheets("Les variables").Cells(CR, 2).Copy .Cells(lig, 1)
                              Else
                                  .Cells(lig, 3) = .Cells(lig, 1): .Cells(lig, 1) = 401100
                              End If
                          Next d
                      End If
                  Loop
              End If
          End With
          Set Plage = Nothing
          Set CR = Nothing
      End Sub
      
      
    2. je crois que tjrs le meme probleme,

      lorsque je mets un nouveau 0XXX dans la feuil "feuil1" qui ne fégure pas l'autre feuil la macro donne une erreure
    3. Re,

      Tout a fait Thierry, vous ne l'avez pas dit que vous pouvez avoir des 0xxx qui ne figurent pas dans Les Variables!!

      C'est a vous de definir le "cahier des charges"

      Je modifie

      Sub decoupe()
          Dim Plage As Range, CR As Range, LV As Long
          
          With Worksheets("feuil1")
              derlig = .Range("A" & .Rows.Count).End(xlUp).Row        'derniere cellule non vide colonne A
              Set Plage = .Range("A1:A" & derlig)                     'mise en memoire plage de cellules
              Nb = Application.CountIf(Plage, "0*")                   'nombre de fois "0" et lettre
              If Nb > 0 Then
                  Memlig = 1
                  Do While Application.CountIf(Plage, "0*") > 0                             'boucle sur la colonne
                      lig = .Columns(1).Find("0*", .Cells(Memlig, 1), , xlWhole).Row
                      Memlig = lig
                      Ville = .Cells(lig, 1)
                      Flg_Vide = False
                      Set CV = Worksheets("Les variables").Columns(1).Find(Ville)
                      If Not CV Is Nothing Then
                          LV = CV.Row
                          If Worksheets("Les variables").Cells(LV, 2) = "" Then Flg_Vide = True
                          Nb = Application.CountIf(Plage, Ville)
                          If Nb > 0 Then
                              For d = 1 To Nb
                                  lig = .Columns(1).Find(Ville, .Cells(lig, 1), , xlWhole).Row
                                  If Not Flg_Vide Then
                                      .Cells(lig, 3) = .Cells(lig, 1):  Worksheets("Les variables").Cells(LV, 2).Copy .Cells(lig, 1)
                                  Else
                                      .Cells(lig, 3) = .Cells(lig, 1): .Cells(lig, 1) = 401100
                                  End If
                              Next d
                          End If
                      Else
                          .Cells(lig, 2) = Ville: .Cells(lig, 1) = "NOK"
                          MsgBox "Attention: " & Ville & " n'est pas dans feuille Les Variables !!!!"
                      End If
                  Loop
              End If
          End With
          Set Plage = Nothing
          Set CR = Nothing
      End Sub
      
    4. Merci Merci Merci, pour le travail que vous avez fait, et pour tout, Merci infiniment