Implantation dans un tableau croisé

Résolu
Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   -  
Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je cherche à choisir une cellule en fonction d'une ligne et d'une colonne pour écrire dedans via VBA.

Je m'explique, les utilisateurs saisissent leurs commentaires dans un Userform (via le bouton en bas sur la feuille), et j'aimerais que lors de la validation, ce commentaire soit transposé dans la pages infos, dans la cellules correspondantes --> En fonction du numéro de semaine sélectionné en cours, et de la personne identifiée.

Idem pour le bouton changement de zone, sur l'USF, j'aimerais que lors d'une saisie la cellule correspondante dans l'onglet infos soit modifié.

Ci-joint mon fichier pour mieux comprendre : https://www.cjoint.com/?0Aoj7FG4t9N

J'espère avoir été clair, merci d'avance :)

1 réponse

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Avec .find(). Exemple :
    Sub recherche_cel()
        Dim col As Long, lig As Long, c As Range, erreur As Boolean
        Dim nom As String, sem As String
        nom = "Daniel G."
        sem = "Semaine 4"
    
        ' recherche colonne
        Set c = Sheets("Infos").Rows(8).Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
        If Not c Is Nothing Then
            col = c.Column
        Else
            erreur = True
        End If
        
        ' recherche ligne
        Set c = Sheets("Infos").[B:B].Find(sem, LookIn:=xlValues, Lookat:=xlWhole)
        If Not c Is Nothing Then
            lig = c.Row
        Else
            erreur = True
        End If
    
        If erreur Then
            MsgBox "erreur"
        Else
            MsgBox "Ligne : " & lig & ", Colonne : " & col
        End If
    End Sub


    eric

    0
    1. Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   28
       
      Bonjour Eriiic,

      Effectivement cette macro à l'air de répondre à mes besoins pour trouver la cellule que je recherche (du moins je pense, j'espère que le fait qu'il y est le même tableau en 3 fois ne va pas porter de confusion sur celui dans lequel je veux mettre mes données), en revanche je ne sais pas comment faire pour remplacer le contenu de cette cellule (une fois trouvé) par le contenu de ma textbox.

      En tout cas merci pour ton aide !

      PS : Peut-on numéroter les lignes sur VBA comme dans tu l'as fais sur le forum ? Si oui, comment ? Merci d'avance.
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      le fait qu'il y est le même tableau en 3 fois ne va pas porter de confusion
      Dans ce cas précise la plage de recherche pour le .find :
      Set c = Sheets("Infos").[B2:B25].Find(sem, LookIn:=xlValues, Lookat:=xlWhole)

      Peut-on numéroter les lignes sur VBA comme dans tu l'as fais sur le forum ? Si oui, comment ?
      Sélectionner le code, dans les icones de mise en forme en haut dérouler la liste de l'icone <> et choisir "basic"

      N'oublie pas de mettre en résolu le moment venu

      eric
      0
    3. Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   28
       
      Merci beaucoup, j'ai réussi à faire exactement ce que je voulais en modifiant un peu ta macro.

      Encore une dernière petite chose si tu veux bien, est-il possible de faire la même chose sur plusieurs onglets ? Je voudrais trouver la cellule de Fabien A, pour la semaine 8 par exemple sans savoir si elle se trouve sur l'onglet Janvier, Février ou Mars ect...
      Est-ce possible directement dans VBA ? Faut-il trouver un moyen de lui indiquer dans quel onglet se trouve quel semaine (un petit tableau sur la feuille infos par exemple) je ne sais vraiment pas comment faire.

      Merci d'avance.
      0
    4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Re,

      Un tableau devra être rempli chaque année...
      Plutôt par une fonction personnalisée pour retrouver le nom d'onglet :
      Sub test()
          Dim m As String
          m = rechMois(8)
          MsgBox "Semaine 8 : " & m
      End Sub
      
      Function rechMois(num_sem As Long) As String
          Const mois As String = "Janvier,Février,Mars" ' à compléter
          Dim sh As Worksheet, c As Range
          For Each sh In Worksheets
              If InStr(mois, sh.Name) > 0 Then ' si la feuille est une feuille mois
                  Set c = sh.[A:A].Find("Semaine " & num_sem, LookIn:=xlValues)
                  If Not c Is Nothing Then
                      rechMois = sh.Name ' trouvé
                      Exit For ' on sort de la boucle
                  End If
              End If
          Next sh
      End Function
      

      Si la chaine retournée est vide c'est que la semaine n'a pas été retrouvée. A tester en 1er pour gérer l'erreur (if... then...else...endif)

      eric
      0
    5. Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   28
       
      Re,

      Encore une fois j'ai réussi à faire exactement ce qu'il me fallait grâce à ton aide.

      Merci pour tout !

      Bonne journée
      0