Affectation adresse Range par Variable

Bonjour,

Je souhaite pouvoir modifier le n° de la colonne de recherche via une la valeur de d'une variable c.

ça fonctionne si je rentre le n° de la colonne F dans Range et non si j'utilise la valeur de la variable c

Dim i As Integer 'n° de ligne
Dim c As String 'n° colonne suivant Recherche 

 'Selection de la colonne de recherche 
If CheckBoxSelNom = True Then
 c = G ' n° colonne G
 Else
 c = F ' n° Colonne F
 End If
         i = 0 'Index

With Sheets("ListeMa2") 'Affection de la feuille de référence

                For i = 7 To Sheets("ListeMa2").Range("F65536").End(xlUp).Row 'Incrementation de l'Index   

                'Recherche si la valeur selectee dans la liste(ListBoxJeton_Nom) existe 
                    'Fonctionne avec le n° de colonne
                    'If Sheets("ListeMoteurMa2").Range("F" & i).Value = Val(TextBoxSel.Value) Then 'Pointage de ligne contenant la valeur définit dans TextBoxSel= ListBoxJeton_Nom

                'Syntaxe qui ne fonctionne pas
                    If Sheets("ListeMoteurMa2").Range("c" & i).Value = Val(TextBoxSel.Value) Then 'Pointage de ligne contenant la valeur définit dans TextBoxSel= ListBoxJeton_Nom

Merci pour votre aide.

Cdlt

Salut

Essayer de déclarer le C comme type numérique ( byte , integer…….)

Bonjour Amir,

Je te remercie pour ton aide.

J'ai testé en déclarant C comme type ( byte , variant, integer…….)

mais idem.

Cdlt

Bonjour,

si vous remplacez c = G par c = 7 et c = F par c = 6?

Cordialement,

Innuendo67

Bonjour,

Essaie ainsi (sans résultat garanti).

Cdlt.

Dim ws As Worksheet, ws2 As Worksheet
Dim I As Long, lCol As Long, n As Long

    lCol = IIf(CheckBoxSelNom, 7, 6)
    Set ws = Worksheets("ListeMa2")
    Set ws2 = Worksheets("ListeMoteurMa2")

    With ws
        n = .Cells(.Rows.Count, 6).End(xlUp).Row
        For I = 7 To n
            If ws2.Cells(lCol, I) = Val(TextBoxSel.Value) Then
                ' code
            End If
        Next I
    End With

Bonsoir

Il me semble que vous ignorez quelques astuces en VBA.

Méthode 1

Utilisez Range(arg), où arg désigne la plage, pour renvoyer un objet Range qui représente une seule cellule ou une plage de cellules. L'exemple suivant montre comment placer la valeur de la cellule A1 dans la cellule A5.

Worksheets("ListeMa2").Range("A5").Value = Worksheets("ListeMa2").Range("A1").Value

Méthode 2

Utilisez Cells(ligne, colonne) où ligne est l'index de ligne et colonne l'index de colonne, pour renvoyer une seule cellule. L'exemple suivant montre comment affecter la valeur 24 à la cellule A1.

Worksheets("ListeMa2").Cells(1, 1).Value = 24

Voici un exemple pour ton cas (dans je fichier joint, entrez la lettre que vous voulez rechercher dans la cellule G1 et appuyez sur le flèche, choisir la colonne de recherche soit A ou B mais pas les deux à la fois

Ceci est pour la Méthode 1 pour la deuxième je vais voir si j aurai le temps (la deuxième est plus compliqué mais bcp utilisées).

Sub recherch()
Dim i As Integer 'n° de ligne
Dim c As String 'n° colonne suivant Recherche
Dim r As String 'n° colonne suivant de resultat
'Selection de la colonne de recherche
If Worksheets("ListeMa2").Range("D1").Value = "x" Then
      c = "A"  ' n° colonne de recherche A
      r = "D" ' n° colonne de resultat d
ElseIf Worksheets("ListeMa2").Range("F1").Value = "x" Then
      c = "B" ' n° Colonne de recherche B
      r = "F"  ' n° colonne de resultat f
End If

If c = "" Or r = "" Then
MsgBox " veuillez selectionner une colonne de recherche"
Exit Sub 'sortir de procedure si il n y ps de colonne pour la recherche
End If

     For i = 2 To 22 'Incrementation avec boucle
     Sheets("ListeMa2").Range("f" & i).ClearContents
     Sheets("ListeMa2").Range("d" & i).ClearContents
     If Sheets("ListeMa2").Range(c & i).Value = Sheets("ListeMa2").Range("G" & 1).Value Then
     Sheets("ListeMa2").Range(r & i).Value = "x"
     End If
     Next

End Sub
18classeur1.xlsm (20.16 Ko)

Ceci est pour la Méthode 2

Tjrs choisir la colonne par « x «

Remarque :

sur Méthode 1 :

Dim c As String 'n° colonne suivant Recherche

Dim r As String 'n° colonne suivant de resultat

Sont déclarés comme type texte = ils prennent des valeurs texte = les lettres des colonnes

sur Méthode 2 :

Dim c As Integer 'n° colonne suivant Recherche

Dim r As Integer 'n° colonne suivant de resultat

Sont déclarés comme type numérique = ils prennent des valeurs numériques = les numéros des colonnes

Sub recherch2()
Dim i As Integer 'n° de ligne
Dim c As Integer 'n° colonne suivant Recherche
Dim r As Integer 'n° colonne suivant de resultat
'Selection de la colonne de recherche
If Worksheets("ListeMa2").Cells(1, 4).Value = "x" Then
      c = 1  ' n° colonne de recherche A
      r = 4 ' n° colonne de resultat d
ElseIf Worksheets("ListeMa2").Cells(1, 6).Value = "x" Then
      c = 2 ' n° Colonne de recherche B
      r = 6  ' n° colonne de resultat f
End If

If c = 0 Or r = 0 Then
MsgBox " veuillez selectionner une colonne de recherche"
Exit Sub 'sortir de procedure si il n y ps de colonne pour la recherche
End If

     For i = 2 To 22 'Incrementation avec boucle
     Sheets("ListeMa2").Cells(i, 4).ClearContents
     Sheets("ListeMa2").Cells(i, 6).ClearContents
     If Sheets("ListeMa2").Cells(i, c).Value = Sheets("ListeMa2").Cells(1, 7).Value Then
     Sheets("ListeMa2").Cells(i, r).Value = "x"
     End If
     Next

End Sub

Bonjour,

je viens de faire un petit fichier afin de vous aider.

Je pense que mon problème vient dans la comparaison,

ça fonctionne si la valeur est numérique et non quand il y a du texte.

Cdl

22find-user-sel.zip (262.32 Ko)

Bonjour,

Je viens de trouver la réponse.

Dans mon dernier message il y avait en réalité la réponse dans ma question,

c'est logique que la comparaison ne fonctionnait pas avec du texte car j'avais utilisé par erreur

Val(TextBoxSel.Value) au lieu

Val(TextBoxSel.texte.

Et surtout merci à tous ce qui m'ont aidé.

Cdlt

Rechercher des sujets similaires à "affectation adresse range variable"