VBA - Range + Variable mobile

Bonjour tout le monde,

J'ai un problème que je n'arrive pas à régler au sujet de la fonction Range couplée à une variable qui peut se déplacer de ligne en ligne.

Je souhaiterai que mon code réalise l'algorithme suivant :

Mot = Trouver("Mot à chercher")

Si Position("Mot") = Position(A éviter)

Alors Checbox1 = Faux

Sinon Checbox1 = Vrai

Fin Si

Si Checkbox1 = Vrai ET Si Position(ColonneFixe, Ligne("Mot")) = ""

Alors Checbox11 = Faux

Sinon Checkbox11 = Vrai

Fin Si

J'ai alors codé sous VBA comme suit :

With Worksheets("Essai").Range("A5:A100")

Set Mot = .Find("Test")

Mot.EntireRow.Select

If Range(Mot) = Range("A12") Then

CheckPrestation.value = False

Else

CheckPrestation.value = True

If Range("E" & Mot) = "" Then

Check01.value = False

Else

Check01.value = True

End If

End If

End With

Ca fait maintenant plusieurs journées que je me prends la tête avec ce soucis, j'espère que mon explication sera suffisemment claire !

A très vite

Salut Tyurne,

on gagnera beaucoup de temps si tu nous dis en français ce que tu comptes faire et en nous présentant ton fichier!

A+

Je vais essayer de décrire le code de façon claire alors, mais ça risque de ne pas l'être énormément

J'ai une première CheckboxMaster qui en active 2 autres. Ces 2 CheckBoxSlave peuvent également en activer 3 autres chacune.

Je souhaite rechercher le texte retourné par la première CheckboxSlave, dans la 1ère colonne. Si elle est présente à sa place d'origine, alors je veux décocher cette CheckboxSlave, dans le cas contraire, je veux l'activer (recopie de son contenu)

Si elle est à un emplacement autre, je souhaite vérifier les CheckboxSlaveSlave de la CheboxSlave qui n'est pas en place, afin de pouvoir recopier également ses données dans la bonne ligne (tout en validant les CheckboxSlaveSlave correspondantes).

A terme je développerai ce code pour la seconde CheckBoxSlave également, une fois que la première arrêtera de buguer

J'espère que c'est assez clair, j'ai passé trop de temps à essayer de résoudre ce problème, donc je risque de donner des explications brouillons et sans avoir pris le recul nécessaire...

Désolé de ne pas avoir développé dès le 1er coup, j'ai d'abord pris le temps de refaire un fichier exploitable avant de l'expliquer :3

Le voici en pièce jointe

Salut Tyurne,

Que fabriques-tu, ici?

Private Sub Command_Click()

With Worksheets("Plan Prototype").Range("A5:A100")
    Fonction.value = True
    Set Cherche = .Find("Prestation A")
    Cherche.EntireRow.Select

    If Range(Cherche) = Range("A12") Then
        PrestationA.value = False
    Else
        PrestationA.value = True

        If Range("E" & Cherche) = "" Then
            CheckA1.value = False
        Else
            CheckA1.value = True
        End If

        If Range("F" & Cherche) = "" Then
            CheckA2.value = False
        Else
            CheckA2.value = True
        End If

        If Range("G" & Cherche) = "" Then
            CheckA3.value = False
        Else
            CheckA3.value = True
        End If

    End If

End With

End Sub

A+

Bonjour,

Ça peut pas marcher !

Peut-être qu'en déclarant et typant les variables, cela mettra mieux les erreurs en évidence...

Salut MFerrand, curulis57, le forum

Le but de mon programme est de déplacer des données afin de les remettre à leur place initiale, tout en sélectionnant les checkbox correspondantes.

Dans mon code, je recherche si la première colonne est vide où non.

Si elle n'est pas vide, je recherche plus précisément le texte contenu dans cette colonne.

S'il correspond au nom de l'une de mes prestations, alors je coche cette prestation dans mon userform (ce qui revient à la déplacer à sa position d'origine).

Une prestation renseigne une ligne complète de données, je cherche donc ensuite les cases documentables. Si elles sont vides, alors je laisse mon userform tranquille, mais si elles sont remplies, alors je sélectionne mes checkbox correspondantes...

J'espère que c'est assez clair :3

Par contre je ne comprends pas ce besoin de déclarer et typer les variables :/ Je suis débutant en VBA et j'apprends à l'aide de forums, ne me tappez pas trop fort sur les doigts s'il vous plait :p

Pourquoi est-ce que ça ne pourrait pas marcher ? :/

Bonne journée ~

Bonjour,

Je n'ai pas trop regardé dans ton classeur... Mais juste une illustration dans le dernier code cité par Curulis : Cherche est une variable objet, de type Range. La déclarer comme il se doit t'aurait peut-être évité de l'utiliser ensuite comme String puis comme Integer !!!

Voilà le code juste remis sur pied :

Private Sub Command_Click()
    Dim Cherche As Range
    Fonction.Value = True
    Set Cherche = Worksheets("Plan Prototype").Range("A5:A100").Find("Prestation A")
    If Cherche.Row = 12 Then
        PrestationA.Value = False
    Else
        PrestationA.Value = True
        If Cherche.Offset(, 4) = "" Then
            CheckA1.Value = False
        Else
            CheckA1.Value = True
        End If
        If Cherche.Offset(, 5) = "" Then
            CheckA2.Value = False
        Else
            CheckA2.Value = True
        End If
        If Cherche.Offset(, 6) = "" Then
            CheckA3.Value = False
        Else
            CheckA3.Value = True
        End If
    End If
End Sub

Il y a juste les éléments inutiles ou aberrants qui ont été ôtés. On peut ensuite simplifier.

Private Sub Command_Click()
    Dim Cherche As Range
    Fonction.Value = True
    Set Cherche = Worksheets("Plan Prototype").Range("A5:A100").Find("Prestation A")
    If Cherche.Row = 12 Then
        PrestationA.Value = False
    Else
        PrestationA.Value = True
        CheckA1.Value = IIf(Cherche.Offset(, 4) = "", False, True)
        CheckA2.Value = IIf(Cherche.Offset(, 5) = "", False, True)
        CheckA3.Value = IIf(Cherche.Offset(, 6) = "", False, True)
    End If
End Sub

Ou même, mieux :

Private Sub Command_Click()
    Dim Cherche As Range, i%
    Fonction.Value = True
    Set Cherche = Worksheets("Plan Prototype").Range("A5:A100").Find("Prestation A")
    If Not Cherche Is Nothing Then
        If Cherche.Row = 12 Then
            PrestationA.Value = False
        Else
            PrestationA.Value = True
            For i = 1 To 3
                Controls("CheckA" & i).Value = IIf(Cherche.Offset(, i + 3) = "", False, True)
            Next i
        End If
    End If
End Sub

Avec ici en plus correction d'un petit défaut : quand on utilise Find, on n'est jamais sûr de trouver ! Il est toujours souhaitable de tester si la recherche est fructueuse pour éviter une erreur d'exécution.

Cordialement.

Bonjour MFerrand, le forum,

Merci beaucoup pour cette réponse

Pour mémoriser l'état des checkbox j'ai finalement réussi à faire quelque chose de beaucoup plus simple :

'Acquisition de l'état des variables à un moment précis

For Each ct In Controls

If TypeName(ct) = "CheckBox" Then

ThisWorkbook.Names.Add ct.Name, ct

End If

Next ct

'Retour de ces valeurs = retour à leur état des checkboxes

On Error Resume Next

For Each ct In Controls

If TypeName(ct) = "CheckBox" Then

ct.Value = ThisWorkbook.Names(ct.Name).RefersTo = "=TRUE"

End If

Next ct

Le truc qui me pose problème maintenant c'est de réussir à créer ma variable de sélection :

En fonction de ma recherche, je dois renseigner dans une variable le numéro de ligne contenant ma valeur recherchée pour ensuite pouvoir sélectionnée la plage "E & NumLigne : T & NumLign"

Sauf que je bloque sur la façon de faire, je n'arrête pas d'avoir des erreurs différentes en fonction de mes diverses tentatives

Encore merci pour l'aide apportée jusqu'à présent et à très vite !

Bonne jourée

Salut tout le monde,

Problème résolu ! Tout est fonctionnel, encore merci pour l'aide que vous m'aurez apporté

Bonne journée ~

Rechercher des sujets similaires à "vba range variable mobile"