Implantation dans un tableau croisé

Résolu/Fermé
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 - 14 janv. 2014 à 09:59
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 - 15 janv. 2014 à 15:05
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

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
14 janv. 2014 à 19:29
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
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
15 janv. 2014 à 10:15
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 15/01/2014 à 10:30
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
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
15 janv. 2014 à 12:19
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 15/01/2014 à 14:34
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
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
15 janv. 2014 à 15:05
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