XL 2010 Sélectionner une ou plusieurs cellules après avoir coché un ou plusieurs checkbox

djedjeto

XLDnaute Junior
Salut cher frère. je suis nouveau dans l'utilisation des codes vba. j'ai un problème mais j'arrive pas à trouver solution. si quelqu'un peut m'aider c'est un devoir à remettre. En fait, j'ai un userform qui comporte 36 checkbox nommé checkbox_1 à checkbox_36 et une base de données excel dont les entêtes font aussi 36 ; Je voudrais qu'à chaque fois que je coche un ou plusieurs checkbox de l'userform de façon aléatoire, les cellules correspondante (A1,B1.....AJ1) qui sont des entêtes soient sélectionnées suivant le nombre de checkbox coché. aidez moi . merci
 
Solution
Est-ce que tu parles de cette instruction en dépassement de capacité ?
VB:
DernièreLigne = ThisWorkbook.Worksheets(FeuilleTableau).Columns(Me.ComboBox1.ListIndex + 1).EntireColumn _
                             .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Je ne comprends pas pourquoi.
Ça peut planter si la colonne est vide mais pas en dépassement de capacité. La colonne n'est jamais vide puisqu'il y a les titres. J'ai quand même protégé par principe.

D'autre part cette instruction qui était en commentaire n'était pas 100% correct car ne prenant pas en compte un éventuel décalage du tableau dans la feuille.

A moins que tu aies plus de 32767 valeurs en colonne. J'ai modifié les indices Integer en Long.

Dudu2

XLDnaute Barbatruc
Pourquoi n'interceptes-tu pas l'évènement _Click() sur chacune de tes CheckBoxes pour valoriser ta base de données selon la valeur True ou False de chaque CheckBox ?
C'est long certes, avec 36 CheckBoxes, mais avec quelques copier / coller ça va vite.

Sinon y a des solutions sophistiquées avec module de classe mais je ne sais pas bien faire. Peut-être un expert saura expliquer.
 

djedjeto

XLDnaute Junior
Pourquoi n'interceptes-tu pas l'évènement _Click() sur chacune de tes CheckBoxes pour valoriser ta base de données selon la valeur True ou False de chaque CheckBox ?
C'est long certes, avec 36 CheckBoxes, mais avec quelques copier / coller ça va vite.

Sinon y a des solutions sophistiquées avec module de classe mais je ne sais pas bien faire. Peut-être un expert saura expliquer.
merci frère. quand je le fais je n'arrive pas a selectionner plus d'une cellule. je veux que quand je coche n checkbox que les cellules correspondantes soient selectionnées contigue ou non
 

Pièces jointes

  • monexERCICE.xlsm
    15.2 KB · Affichages: 10

Dudu2

XLDnaute Barbatruc
Dans le code du UserForm1:
VB:
Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim Rng As Range
    Const FeuilleSélection = "Feuil1"
    
    For i = 1 To 36
        If Me.Controls("CheckBox_" & i).Value Then
            If Rng Is Nothing Then
                Set Rng = ThisWorkbook.Worksheets(FeuilleSélection).Cells(1, i)
            Else
                Set Rng = Union(Rng, ThisWorkbook.Worksheets(FeuilleSélection).Cells(1, i))
            End If
        End If
    Next i
    
    If Not Rng Is Nothing Then Rng.Select
    Unload UserForm1
End Sub
 

Dudu2

XLDnaute Barbatruc
Je me demande si, lorsque tu dis "sélectionner les entêtes", c'est bien une sélection qu'il faut faire.
Moi je verrais plutôt un masquage des colonnes qui n'ont pas été cochées dans les CheckBoxes.
Le vocabulaire a son importance. A toi de confirmer... ou pas !
 

djedjeto

XLDnaute Junior
Dans le code du UserForm1:
VB:
Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim Rng As Range
    Const FeuilleSélection = "Feuil1"
   
    For i = 1 To 36
        If Me.Controls("CheckBox_" & i).Value Then
            If Rng Is Nothing Then
                Set Rng = ThisWorkbook.Worksheets(FeuilleSélection).Cells(1, i)
            Else
                Set Rng = Union(Rng, ThisWorkbook.Worksheets(FeuilleSélection).Cells(1, i))
            End If
        End If
    Next i
   
    If Not Rng Is Nothing Then Rng.Select
    Unload UserForm1
End Sub
super Dudu2. c'est exactement ce que je cherchais. tu m'as sauvé bisou. et si je devrais exporter la selection en cours sur une nouvelle feuille ou dans un nouveau classeur
 

Dudu2

XLDnaute Barbatruc
Et 2ème question, exporter comment dans la feuille de destination ?
Les entêtes ou colonnes sélectionnée juxtaposées indépendamment des positions des entêtes ou colonnes d'origine ou en respectant les positions initiales ?
 

djedjeto

XLDnaute Junior
Et 2ème question, exporter comment dans la feuille de destination ?
Les entêtes ou colonnes sélectionnée juxtaposées indépendamment des positions des entêtes ou colonnes d'origine ou en respectant les positions initiales ?
oui . je voudrais exportez toutes les colonnes des entêtes sélectionnées qui seront juxtaposées dans la destination . mais sous c'est entête il y aura des données après. donc dans chaque colonne de la première à la dernière ligne contenant de valeur
 

Dudu2

XLDnaute Barbatruc
Si le but de l'opération est de copier ces colonnes vers une nouvelle feuille, il n'est pas nécessaire de faire une sélection des colonnes.

Comment veux-tu choisir la destination ?
- Elle est déterminée avant la sélection ?
- On demande à l'utilisateur s'il veut créer une nouvelle feuille dans le classeur ?
- On demande à l'utilisateur s'il veut créer un nouveau classeur ?
 

djedjeto

XLDnaute Junior
Si le but de l'opération est de copier ces colonnes vers une nouvelle feuille, il n'est pas nécessaire de faire une sélection des colonnes.

Comment veux-tu choisir la destination ?
- Elle est déterminée avant la sélection ?
- On demande à l'utilisateur s'il veut créer une nouvelle feuille dans le classeur ?
- On demande à l'utilisateur s'il veut créer un nouveau classeur ?
merci Dudu2. oui comme c'est 36 COLONNES, j'aimerais qu'après avoir choisi ces colonnes en cochant les checkbox les copy et exporter vers un nouveau classeur en demandant bien s'il aimerais copier les cellules sélectionnées vers un nouveau classeur? si oui on les copier de façon juxtaposée. merci infiniment pour ton aide
 

Statistiques des forums

Discussions
312 922
Messages
2 093 644
Membres
105 775
dernier inscrit
assen