Partage
  • Partager sur Facebook
  • Partager sur Twitter

[EXCEL] Condition IF ? Utilisation de macro ?

Sujet résolu
    19 avril 2022 à 16:40:53

    Bonjour,

    Avant de commencer à faire X formations sur ce sujet, je voudrai savoir si c'est possible dans un premier temps, plutôt que de perdre mon temps, mais également comment le faire.

    Je vous expose mon problème :

    J'ai un Tableau sur une Feuille A, avec X Personnes et X Numéros de téléphone associés. Sur ma feuille B, j'ai également X Personnes, avec X Numéros de téléphone, mais également d'autres données, tel que le type de téléphone, l'IMEI etc qui ne sont pas forcément dans le même ordre. (voir image ci dessous)

    Feuille A : https://prnt.sc/yqkw0t_pfeWT

    Feuille B : https://prnt.sc/ROIRt1W-s5UJ

    J'aimerai que lorsque je remplace le nom de Utilisateur X dans la Feuille A par "Disponible", cela aille automatiquement effacer le contenu de mes 5 dernières colonnes, de l'autre feuille, de la ligne correspondant à l'utilisateur/numéro que je viens de modifier dans la feuille A. (Tout en sachant que 2 de mes colonnes sont avec listes déroulantes.)

    Pensez vous que cela est possible ? Si oui auriez vous des conseils/tutos ou de l'aide à me fournir ? Je vous avoue que je ne connais pas grand chose voir rien du tout dans ce domaine..

    Merci de vos retours !

    Bonne journée

    -
    Edité par DamienVln 19 avril 2022 à 16:45:42

    • Partager sur Facebook
    • Partager sur Twitter
      19 avril 2022 à 18:35:11

      ça peut se gérer dans l'évènement Worksheet_Change() de la feuille A; en paramètre, on a Target, la cellule modifiée.

      Il faut aussi connaitre la valeur précédente de la cellule pour pouvoir la rechercher dans la 2nde feuille, donc mémoriser sa valeur avant changement

      Ensuite, il faut chercher l'ancienne valeur dans le 2nd onglet (par exemple avec un Range.Find https://docs.microsoft.com/en-us/office/vba/api/excel.range.find ) à affiner si l'utilisateur peut être présent plusieurs fois (dans ce cas-là ce serait le couple utilisateur-numéro à vérifier).

      code VBA à mettre dans le module de la 1ère Feuille (ici son nom est Feuil1n et la 2nde feuille s'appelle Feuil2)

      Option Explicit
      
      Private oldValue
      
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          'on mémorise la valeur de la 1ère cellule cible (si une plage a été sélectionnée)
          oldValue = Target.Cells(1, 1).Value
      End Sub
      
      Private Sub Worksheet_Change(ByVal Target As Range)
          'Si la cible est plus grande qu'une seule cellule, on ne prend que la 1ère cellule
          If Target.Count > 1 Then
              Set Target = Target.Cells(1, 1)
          End If
          'affichage adresse de la cellule cible dans la console de debug
          Debug.Print Target.Address
          'affichage de l'ancienne valeur et de la nouvelle valeur de la cellule cible
          Debug.Print oldValue & "=>" & Target.Value
          'déclaration des variables
          Dim CellTrouve As Range
          Dim i As Integer
          'si la cellule cible dans la colonne A de cette feuille, et que sa nouvelle valeur (en minuscule) est égale à "disponible"
          If Not Intersect(Target, ThisWorkbook.Sheets("Feuil1").Range("a:a")) Is Nothing And LCase(Target.Value) = "disponible" Then
              ' alors on cherche la 1ere cellule contenant l'ancienne valeur dans la colonne C de la 2nde feuille
              Set CellTrouve = ThisWorkbook.Sheets("Feuil2").Range("c:c").Find(what:=oldValue)
              'si on a trouvé
              If Not CellTrouve Is Nothing Then
                  'on efface les valeurs des colonnes suivantes
                  For i = 0 To 4
                      CellTrouve.Offset(0, i) = ""
                  Next i
              End If
          End If
      End Sub
      
      



      -
      Edité par umfred 19 avril 2022 à 18:35:25

      • Partager sur Facebook
      • Partager sur Twitter

      [EXCEL] Condition IF ? Utilisation de macro ?

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown