Récupérer coordonnées d'une cellule contenant du texte (inputbox)

Bonjour à tous,

Je ne suis pas familier avec le vba et j'essaie d'automatiser les modifications d'une BDD afin d'en faciliter la gestion.

Étant débutant je sollicite votre aide (ne me donnez pas forcément la réponse mais des pistes de solutions me vont très bien dans un premier temps, histoire de voir si je peux apprendre).

Voici le souci :

Un classeur contient 2 formulaires, le 1er pour ajouter une ligne avec des informations (text-box et combo-box) et le second (identique) mais dans l'optique de les modifier.

Avant d'ouvrir mon formulaire de modification, j'ai une inputbox qui demande à l'utilisateur de renseigner une référence de document sous la forme "xx0000" (peu importe la taille de la chaîne de caractères).

Ce que je souhaite faire c'est, qu'à partir de la chaine de caractère inscrit dans la boite de dialogue, pouvoir récupérer l'emplacement de la cellule dans sa colonne (Me.txtreference) pour la stocker dans CellNum.

Ensuite j'aimerai utiliser la variable MaLigne pour effectuer la recherche des informations de la ligne correspondante dans mon tableau afin de les inscrire dans les champs correspondants.

En l'état cela fonctionne si le contenu de ma recherche est uniquement composée de chiffres mais je souhaite que mes références soient alphanumériques).

Private Sub UserForm_Initialize()

    'Déclaration des variables
    Dim MaReference
    Dim CelNum
    Dim MaLigne As Integer

    'affectation du numéro du texte dans la variable
    MaReference = InputBox("Saisir la référence du texte à modifier", "Modification")

    'frmmodification ou Me fonctionnent tous les 2
    Me.txtreference = MaReference
    MaLigne = MaReference '+ 1
    'On se positionne sur la ligne de la référence à modifier
    Cells(MaLigne, 1).Select

    'test contenu de la cellule active
    If ActiveCell <> "" Then

        Me.txttitre = Cells(MaLigne, 2)
        Me.cbonature = Cells(MaLigne, 3)
        Me.cboutilisateur = Cells(MaLigne, 5)
        Me.cboperimetre = Cells(MaLigne, 7)
        Me.cboemetteur = Cells(MaLigne, 9)
        Me.cbophaseprojet = Cells(MaLigne, 11)
        Me.cboniveau = Cells(MaLigne, 13)

    End If

End Sub

Par avance, merci pour votre aide.

Bonsoir DC_1 et

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER] ainsi que ses fonctionnalités
qui vous aideront dans vos demandes et réponses sur ce forum.

Merci de votre participation

Cordialement

Bonsoir,

vous écrivez : MaLigne = MaReference, où je pense que MaLigne est un chiffre correspondant au numéro de ligne de la feuille Excel où se trouve la valeur Référence.
donc si l'input box renvoie une donnée alphanumérique cela ne fonctionne plus, normale.

Il vous faut donc trouver le numéro de ligne de la feuille Excel où se trouve la référence donnée dans l'inputbox.
Vous pouvez comme "première solution" utiliser Find qui permet de chercher une valeur dans une plage.

Private Sub UserForm_Initialize()

    'Déclaration des variables
    Dim MaReference
    Dim CelNum
    Dim MaLigne As Integer
Dim Cel As Range ' variable représentant la cellule où l'on va trouver la valeur cherchée
Dim Plage As Range ' variable représentant la plage de cellule dans laquelle on va chercher la référence

    'affectation du numéro du texte dans la variable
    MaReference = InputBox("Saisir la référence du texte à modifier", "Modification")

    'frmmodification ou Me fonctionnent tous les 2, voir même ne rien mettre !
    Me.txtreference = MaReference

'********************* LouReeD
Set Plage = Activesheet.Range("A5:A125") ' on attribue à Plage la colonne de recherche (par exemple)
Set Cel = Plage.Find(MaReference) ' on attribue à Cel le résultat de la recherche
' si Cel n'est pas égale à rien c'est qu'on a trouvé, alors
If Not Cel Is Nothing Then
    MaLigne = Cel.Row ' alors MaLigne est égal à la ligne de la cellule Cel où se trouve la référence
Else ' si on n'a pas trouvé la référence
    ' que fait-on ? On Quitte .
    Unload Me
End If

    ' MaLigne = MaReference '+ 1 n'est plus utile
    'On se positionne sur la ligne de la référence à modifier
    ' Cells(MaLigne, 1).Select pas utile de sélectionner

    'test contenu de la cellule active
    ' If ActiveCell <> "" Then pas utile de tester puisque l'on a trouvé

        Me.txttitre = Cells(MaLigne, 2)
        Me.cbonature = Cells(MaLigne, 3)
        Me.cboutilisateur = Cells(MaLigne, 5)
        Me.cboperimetre = Cells(MaLigne, 7)
        Me.cboemetteur = Cells(MaLigne, 9)
        Me.cbophaseprojet = Cells(MaLigne, 11)
        Me.cboniveau = Cells(MaLigne, 13)

    'End If plus utile non plus

End Sub

Voici votre code avec ma proposition en partant du principe que la recherche de la référence se fait en colonne A de la ligne 5 à 125.
Certaine ligne de votre code en commentaire car devenues inutiles ou l'étaient déjà.

@ bientôt

LouReeD

Nota : pourquoi 2 USF identiques ? Si vous en avez un pour la création de données, celui-ci peut également servir pour la consultation, la modification et la suppression des enregistrements ! Voyez ceci C'est un exemple parmi tant d'autre !

Bonjour LouReed,

Tout d'abord, merci pour ton retour.

je n'ai pas encore eu le temps de tester ta solution mais je pense que c'est ce qui me manquait.

Aussi, je vais prendre le soin de lire l'article que tu m'as conseillé car cela me semble bien plus efficace que la solution que j'envisageais (plusieurs formulaires et un bouton Suppr).

Encore merci.

Je ferme ce poste et reviendrai demander de l'aide si besoin ;-).

Bonsoir,

je veille... J'attends votre retour !

@ bientôt

LouReeD

Bonjour LouReed (et les autres par la même occasion),

Merci pour la piste me permettant de corriger le code.

Voici le code tel que je l'utilise actuellement.

Il y a évidemment encore des améliorations à faire ;-)

Private Sub UserForm_Initialize()

    'Déclaration des variables
Dim MaReference
Dim MaLigne As Integer
Dim Cel As Range
Dim Plage As Range 
    MaReference = InputBox("Saisir la référence du texte à modifier", "Modification")
    If MaReference = "" Then Exit Sub

    Me.txtreference = MaReference

Set Plage = ActiveSheet.Range("Référence") 
Set Cel = Plage.Find(MaReference) 
If Not Cel Is Nothing Then
    MaLigne = Cel.Row 
    Cells(MaLigne, 2).Select 'Ici j'ai conservé le sélecteur sinon les modifications se font à l'emplacement du curseur dans la feuille
Else    Unload Me
End If

        Me.txttitre = Cells(MaLigne, 3)
        Me.cbonature = Cells(MaLigne, 5)
        Me.cboutilisateur = Cells(MaLigne, 7)
        Me.cboperimetre = Cells(MaLigne, 9)
        Me.cboemetteur = Cells(MaLigne, 11)
        Me.cbophaseprojet = Cells(MaLigne, 13)
        Me.cboniveau = Cells(MaLigne, 14)
        Me.cbodgii = Cells(MaLigne, 15)
        Me.cboinfrapole = Cells(MaLigne, 16)
        Me.cboconception = Cells(MaLigne, 17)
        Me.cborealisation = Cells(MaLigne, 18)
        Me.cbomaintenance = Cells(MaLigne, 19)

End Sub

'***********************************************
'Procédure qui permet de modifier un texte
'dans la base de donnée à partir du formulaire
'***********************************************
Private Sub btnvalider_Click()

ActiveCell = Me.txtreference
ActiveCell.Offset(0, 1) = Me.txttitre
ActiveCell.Offset(0, 3) = Me.cbonature
ActiveCell.Offset(0, 5) = Me.cboutilisateur
ActiveCell.Offset(0, 7) = Me.cboperimetre
ActiveCell.Offset(0, 9) = Me.cboemetteur
ActiveCell.Offset(0, 11) = Me.cbophaseprojet
ActiveCell.Offset(0, 12) = Me.cboniveau
ActiveCell.Offset(0, 13) = Me.cbodgii
ActiveCell.Offset(0, 14) = Me.cboinfrapole
ActiveCell.Offset(0, 15) = Me.cboconception
ActiveCell.Offset(0, 16) = Me.cborealisation
ActiveCell.Offset(0, 17) = Me.cbomaintenance

End Sub

Maintenant je cherche le meilleur moyen de copier certaines colonnes dans une autre feuille (certaines colonnes se remplissent grâce à des fonctions directement depuis les cellules et ce sont ces colonnes que je souhaite utiliser par ailleurs).

De plus, j'ai regardé le formulaire USerForm CRUD Tableaux Structuré mais c'est assez difficile à appréhender et à modifier pour correspondre à mon besoin au vu de mon niveau.

Pour pouvoir le faire j'aurais besoin soit d'améliorer mes connaissances, soit d'un coup de main. D'ailleurs je n'arrive pas à faire fonctionner correctement le formulaire car j'ai une erreur lors de la création d'une nouvelle entrée :

Private Sub tb3_Change()
   On Error Resume Next
'l'arrêt se focalise sur TB4.SetFocus. J'ai réussi à le contourner en retirant la ligne  
 tb4.SetFocus
End Sub

Pour le moment je vais travailler ma solution car au moins je peux corriger les erreurs sans trop de difficultés.

Bonjour DC_1

Le sujet était marqué comme résolu, je le verrouille donc.
Pour plus de visibilité, merci d'en ouvrir un nouveau si vous avez besoin d'une autre aide

LouReed n'aurait pas dû vous répondre "en attendant votre retour"

Merci de votre compréhension

Rechercher des sujets similaires à "recuperer coordonnees contenant texte inputbox"