[VBA Excel] Concaténation pour retrouver un contrôle
Hors lignePaul-hewson Le 15/11/2005 à 16:45 Profil de Paul-hewson Configuration de Paul-hewson

Bonjour,

Je me demandai si il était possible de concaténer une série d'1 lettre et 3 chiffres où la lettre et le dernier chiffre serait quelque chose de fixe mais dont les 2 chiffres du milieu serait des variables déclaré comme integer tout celà pour récupérer le nom d'un contrôle. (dans mon cas un bouton radio)

Voilà un petit exemple de ce que à quoi celà pourrait ressembler sans que j'ai mit d'opérateur de concaténation :

    i = 1
    j = 1
    
    While (i < 7)
        While (ActiveCell <> "")
            If (ActiveCell = 1) Then
            Qij1.Value = 1
            ElseIf (ActiveCell = 2) Then
                    Qij2.Value = 1
                    ElseIf (ActiveCell = 3) Then
                            Qij3.Value = 1
                            Else: Qij4 = 1
            End If
            j = j + 1
        Wend
    i = i + 1
    Wend


Sachant que i et j sont des variables déclarés en integer donc dans Qij1 Q et 1 sont fixés, puis i et j sont les variables déclaré en tant qu'integer.

La concaténation de l'ensemble doit se rapporter au nom d'un contrôle, pour moi un bouton radio.

Est-ce faisable ? (je n'ai pas envie de faire une liste de 30 si pour vérifier chaque groupe de bouton radio qui se trouve sur ma fiche d'évaluation ^^)

Merci d'avance :)
Hors ligneLebabs Le 15/11/2005 à 18:06 Profil de Lebabs Configuration de Lebabs

Salut,
Je ne comprends pas très bien le but de l'opération.
Cette concaténation doit-elle trouver et afficher successivement le nom de tes boutons radio?. Si oui, que se passe-t-il ensuite?
Ca ne parrait pas insoluble, à condition de bien comprendre le problème.
A+
--
D'une étincelle peut jaillir la lumière.
Hors lignePaul-hewson Le 15/11/2005 à 19:31 Profil de Paul-hewson Configuration de Paul-hewson

Alors le but, c'est de pouvoir grâce à des boucles et 4 if parcourir tous mes boutons radio sans avoir à en faire une liste exhaustive un par un en vba.

Pour celà je les ai codifié. J'ai mit une lettre Q en premier caractère pour tous. Ensuite il y a 2 nombres variable qui représente la colonne et la ligne à laquelle se trouve le bouton. (un peu comme un embranchement de cellule dans excel par exemple)

Et le dernier numéro est fixe car c'est le numéro du bouton dans sa frame (son groupe). Comme tous les groupes ont 4 boutons radio j'ai mit les chiffres 1,2,3 et 4 en fin de numéro codé.

Le but de ce code c'est bien évidemment de pouvoir en 2 boucles (une pour parcourir les lignes, l'autre les colonnes) et quelques if pouvoir parcourir l'ensemble de mes boutons radio pour savoir quels bouton radio doit être sélectionné dans chaque groupe.

Le tout se réferère à un tableau dans une feuille de calcul, organiser pour servir de "base de donnée légère et simpliste" afin de sélectionner les bons boutons.

Ce qui me pose problème en l'occurrence c'est que pour que ça marche il faut que je concatène comme ça


Q (caractère fixe) & i (la variable colonne) & j (la variable ligne) & 1 (un chiffre fixe)

Pour chaque frame (groupe de bouton radio) j'ai 4 code comme comme celui-ci

Ca donnera pour la première frame du tableau les boutons

Q111 Q112 Q113 Q114

Et si je passai à la ligne en dessous ça ferait

Q121 Q122 Q123 Q124

etc..

Et si on change de colonne et qu'on est sur la première ligne c'est :

Q211 Q212 Q213 Q214

J'espère que c'est un peu plus clair, je posterai une partie de ce que à quoi ressemble la fiche ce soir.


Mais donc le problème principal que j'ai à soumettre c'est est-ce qu'une concaténation telle que la mienne me permettra de contrôler le bouton radio dans le code vba.

En bref est ce que Q & i & j &4 va me permettre de manipuler le bouton radio auquel il correspondra selon la valeur de i et de j.

C'est un peu compliqué j'en conviens ^^
Hors ligneLebabs Le 18/11/2005 à 19:18 Profil de Lebabs Configuration de Lebabs

Bonjour,
Je ne crois pas quon puisse appeler un bouton radio à partir dune variable construite par concaténation  de lettres et de chiffres. En tout cas, je ne sais pas faire. Mais en relisant ton message, il me semble que tu vas chercher midi à quatorze heures. (Sauf si je nai pas compris, et tu voudras bien men excuser). Jai limpression que tu es comme ce type qui avait installé des interrupteurs dans toutes ses pièces pour avoir de la lumière et qui cherchait un moyen de les actionner à distance ?
Je veux dire par là que tes boutons radio sont un moyen de déclencher quelque chose. Donc, sauf erreur de ma part, le but serait, non pas daccéder aux boutons radio, mais plutôt  aux codes qui sont derrière.
Je te propose donc de contourner le problème en faisant autant de macros quil y a de boutons radio, chaque macro étant une copie conforme du code de chaque bouton radio. Quand au nom de ces macros, ça sera le même que celui de tes boutons radio, sauf quil faudra ajouter une lettre après le Q (Par exemple un M pour Macro) pour la différencier des codes . (Je crois quun nom de macro composé dune seule lettre avant une série de chiffre nest pas reconnu).Ce qui donnera QM111, QM112, etc

Voici une petite macro qui liste toutes ces nouvelles macros :

Sub listing()
Dim i As Integer, j As Integer, l As Integer, a As Integer
For i = 1 To 2
For j = 1 To 4
For l = 1 To 4
Cells(10 + a, 5).Value = "QM" & j & i & l
a = a + 1
Next l
Next j
Next i
End Sub

Par contre, si tu remplaces la ligne      « Cells(10 + a, 5).Value = "QM" & j & i & l »       par  
Application.Run "ooooo.xls!QM111"
Dans laquelle     ooooo     est le nom de ton programme, chaque macro sexécutera automatiquement.

Evidemment, tu peux concaténer le nom des macros à exécuter à partir de lettres et chiffres importés de ta feuille de calcul afin de sélectionner celle qui tintéresse.

Ceci peut-il résoudre ton problème ?
A+
--
D'une étincelle peut jaillir la lumière.
Hors lignePaul-hewson Le 23/11/2005 à 14:27 Profil de Paul-hewson Configuration de Paul-hewson

Je m'excuse de repasser un peu tard.

J'ai finalement trouvé la solution à mon problème. Je la laisse ici si elle peut resservir à quelqu'un d'autre un jour :)

While (i < 7)
     j = 1
     While (ActiveCell <> "")
          If (ActiveCell = 1) Then
              Me.Controls("Q" & i & j & 1).Value = 1
          ElseIf (ActiveCell = 2) Then
                    Me.Controls("Q" & i & j & 2).Value = 1
                ElseIf (ActiveCell = 3) Then
                          Me.Controls("Q" & i & j & 3).Value = 1
                      ElseIf (ActiveCell = 4) Then
                                Me.Controls("Q" & i & j & 4).Value = 1
          End If
          j = j + 1
          ActiveCell.Offset(1, 0).Select
     Wend
     i = i + 1
     ActiveCell.Offset(-9, 1).Select
Wend


Dans mon cas celà parcourait comme on peut le voir sur l'image plus haut une liste de bouton radio avec un nom de code Q + numéro de colonne (i) + numéro de ligne (j) + numéro d'ordre du bouton dans sa frame (groupe de bouton option allant de 1 à 4).

Vala, merci en tout de même pour l'aide apportée :))
A bientôt
Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels