Copie sous condition

Résolu
dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

Je souhaiterais faire une copie de la colonne F
Vers la colonne "Nom" comme suit:

    ActiveSheet.Range(ActiveSheet.Range("F65536").End(xlUp), "F2").Select
    Selection.Copy

    Rows(1).Find("Nom", LookAt:=xlWhole).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Mais pas à pas avec une condition et un ajout:

Si la valeur de la cellule à copier est différente de "#"
on la recopie en joutant "_A"

Si la valeur de la cellule à copier est égale à "#"
on recopie la valeur de la cellule juste au-dessus en joutant "_B"

Votre aide serait la bienvenue...
Lo.

1 réponse

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Il y a dans ton énoncé quelques bizarreries mais en le respectant, cela doit donner ceci :
    Dim col As Integer, lig As Long
        With ActiveSheet
            col = .Rows(1).Find("Nom", LookAt:=xlWhole).Column
            For lig = 2 To .Cells(Rows.Count, "F").End(xlUp).Row
                If .Cells(lig, "F") <> "#" Then
                    .Cells(lig, col) = .Cells(lig, "F") & "_A"
                Else
                    .Cells(lig - 1, col) = .Cells(lig, "F") & "_B"
                End If
            Next lig
        End With
    

    0
    1. dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci pour ton aide.
      J'avoue que ce n'était pas très clair...

      En adaptant ta proposition pour le résultat escompté, voilà ce que ça donne:

      Sub Créer_les_noms()
          
          Dim col As Integer, lig As Long
          With ActiveSheet
              col = .Rows(1).Find("Nom", LookAt:=xlWhole).Column
              For lig = 2 To .Cells(Rows.Count, "F").End(xlUp).Row
                  If .Cells(lig, "F") <> "#" Then
                      .Cells(lig, col) = .Cells(lig, "F") & "_A"
                  Else
                      .Cells(lig, col) = .Cells(lig - 1, "F") & "_B"
                  End If
                  Next lig
              End With
              
      End Sub


      La boucle que j'avais entrepris, en plus de ne pas fonctionner,
      était beaucoup plus alambiquée que ça...

      Ta citation d’Antoine est fort à propos !

      Merci encore.
      Lo.
      0
    2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonsoir,

      Merci du retour, il faut garder l'alambic pour l'extraction des alcools ou essences ! ;-)
      0