Opération sur colonne variable

Opération sur colonne variable - VB/VBA/VBS - Programmation

Marsh Posté le 19-02-2014 à 23:05:35    

Bonjour à tous,
 
J'ai une petite question pour vous, probablement simple, mais je n'ai pas trouver de réponse adaptée (ou je suis très nul....)
 
Je construit un petit code pour des calculs de rapports sur des activités utilisateurs.
 
J'ai en colonne les groupes d'utilisateurs et en ligne les dossiers consultés.
 
Ma question:
Est-il possible de dire a la manière d'un
Range("A1:A" & Group).Copy
 
quelque chose comme
 
    'Columns("B:O" ).Select
    'Selection.ColumnWidth = 12
 
avec le O variable
 
J'ai déja le nombre de groupes en variable "Group"
 
Merci pour vos idées !
 
Mech
 

Reply

Marsh Posté le 19-02-2014 à 23:05:35   

Reply

Marsh Posté le 24-02-2014 à 15:11:36    

Salut,
 
Je viens de saisir un bout de code qui fonctionne, à toi de t'en inspirer.
 

Code :
  1. Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  2. 'Désactivation du menu contextuel'
  3. Cancel = True
  4. 'Déclaration de variable'
  5. Dim O As Integer
  6. O = Range("A1" ).Value
  7. 'Séléction des colonnes en fonction de O'
  8. If O <> 0 Then
  9.         If i = 1 Then
  10.             'Si O=1'
  11.             Sh.Columns(2).Select
  12.         Else
  13.             'Si O>1'
  14.             Sh.Range(Columns(2), Columns(O + 1)).Select
  15.         End If
  16.     'Ajustement de la largeur des colonnes de la séléction courante'
  17.     Selection.ColumnWidth = 12
  18. Else
  19.     'Réinitialisation de la largeur des colonnes de la feuille courante'
  20.     Sh.Columns.ColumnWidth = 8.29
  21. End If
  22. End Sub

Reply

Marsh Posté le 24-02-2014 à 16:01:51    

Salut,
 
C'est aussi simple que ça :
 

Code :
  1. myColumn = "D"
  2. MyGroup = "1"
  3. Range("A1:" & myColumn & MyGroup).Select

Reply

Marsh Posté le 24-02-2014 à 19:30:50    

Ai-je bien compris la question!? Il me semble qu'il souhaite sélectionner un certain nombre (O) de colonnes pour redimensionner leur largeur! D'où le titre "Opération sur colonne variable". Je me trompe!?
 

Citation :

quelque chose comme
 
    'Columns("B:O" ).Select
    'Selection.ColumnWidth = 12
 
avec le O variable


 
En relisant le post suivant:
 

Citation :

C'est aussi simple que ça :
 
Code :
 
    myColumn = "D"
    MyGroup = "1"
    Range("A1:" & myColumn & MyGroup).Select


 
Ben en fait oui et non! Je pense qu'il souhaite sélectionner une plage de colonnes dont il ne connait pas la "Lettre"  de la dernière, mais uniquement un "nombre" (Nombre de colonnes à séléctionner depuis la première).  
 
Eclaircissez moi la lanterne si je n'ai pas compris ce qu'il veut!
 
 
 
 

Reply

Marsh Posté le 24-02-2014 à 19:49:35    

A lui de nous dire comment il détermine la colonne.

Reply

Marsh Posté le 25-02-2014 à 17:17:16    

Merci à tous pour vos réponses
 
En fait, je cherche bien a activer un nombre de colonne variable
 
Pour vous donner une idée je colle ici une partie de mon code: (ok c'est moche, c'est pas optimiser ca fait mal aux yeux tout ca, mais je suis encore un noob alors siouplé :p)
 
 'Déduction de la liste de bidder et compte du nombre de groupe bidder
     
    Sheets.Add After:=Sheets(Sheets.count)
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveSheet.Range("A1:A" & lng).RemoveDuplicates Columns:=1, Header:= _
        xlNo
    Rows("1:2" ).Delete Shift:=xlUp
     
Group = ActiveSheet.UsedRange.Rows.count
       
'Copie de la liste des bidder sur page de calcul
     
    Range("A1:A" & Group).Copy
    Sheets.Add After:=Sheets(Sheets.count)
    Range("B4" ).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
         
    'Columns("B:O" ).Select
    'Selection.ColumnWidth = 12
 
'Détermination de la liste des dossiers principaux et compte
 
    Sheets("Sheet1" ).Select
    Columns("E:E" ).Copy
    Sheets("Sheet2" ).Select
    Sheets("Sheet2" ).Paste
    Rows("1:2" ).Delete Shift:=xlUp
       
    Columns("A:A" ).Select
    ActiveSheet.Range("A1:A" & lng).RemoveDuplicates Columns:=1, Header:= _
        xlNo
    mainf = ActiveSheet.UsedRange.Rows.count
         
    Range("A1:A" & mainf).Copy
    Sheets("Sheet3" ).Select
    Range("A5" ).Select
    ActiveSheet.Paste
     
    Range("B5" ).Select
    ActiveCell.FormulaR1C1 = "=COUNTIFS(Sheet1!C5,RC1,Sheet1!C6,R4C)"
    Selection.AutoFill Destination:=Range("B5:B" & mainf + 4), Type:=xlFillDefault
    Range("B5:B" & mainf + 4).Select
    Selection.AutoFill Destination:=Range("B5:O" & mainf + 4), Type:=xlFillDefault
 
 
---------------------------------------------------------------------------------------------------------
 
Pour comprendre, j'ai un rapport d'activité xls qui me donne pour chaque visite sur un doc, une ligne avec le nom du groupe et le nom du dossier parent principal
 
J'ai le nombre de groupes
J'ai le nombre de dossiers principaux,
J'ai construis mes formules avec la variable "group" mais je ne vois pas comment le faire avec ma variable mainf.
Parce que j'ai mis O pour l'instant, mais si jamais il se se rajoute des dossiers principaux, je l'ai dans le ***
 
En gros mmarle à tout compris :p
 
Merci !
 
 

Reply

Marsh Posté le 25-02-2014 à 17:45:55    

J'ai toujours pas compris où est le problème.
Comment tu détermines le nombre de colonne à copier ? C'est la dernière colonne non vide ?
Si c'est le cas, vois du côté de la fonction End

Reply

Marsh Posté le 25-02-2014 à 17:54:03    

Copier les colonnes n'est pas un problème, parce que je suis passé de lignes a colonnes.
 
Exemple:
 
groupe1
groupe1
groupe25
groupe24
groupe34
groupe41
 
Avec ca, je me retrouve avec 5 groupes différents, donc je vire les doublons, je sort et je copie de A1 à A"x" puisque j'ai X
Je colle ca en transposant en colonne.
 
Mais du coup, comme faire pour appliquer une opération sur ces colonnes ?  
Je peux pas lui dire A1 à "X"1, ca marche pas.
 
Donc comment faire ?

Reply

Marsh Posté le 25-02-2014 à 18:43:05    

Code :
  1. LettreColonne = Split(Cells(1, numéro de colonne).Address(1, 0), "$" )(0)
 

Tu remplaces "numéro de colonne" par ton X


Message édité par Takama13 le 25-02-2014 à 18:44:41
Reply

Marsh Posté le 25-02-2014 à 22:51:39    

Grand merci !
Je vais essayer ca !
 
Je maitrise mal le Cells, ca va venir (un jour...)

Reply

Marsh Posté le 25-02-2014 à 22:51:39   

Reply

Marsh Posté le 27-02-2014 à 00:04:19    

Ce ne serais pas ce genre de chose que tu cherche?

Code :
  1. Dim maplage as range
  2. With Feuil1 ' à adapter
  3.     Set maplage = .Range(.Cells(Firstcolumn, Firstline), .Cells(lastcolumn, lastline))
  4. End With


source modifiée


---------------
il s'appel le ronge me doute
Reply

Marsh Posté le 27-02-2014 à 08:40:48    

Bon j'avais bien compris son problème dès le départ.
 
Lui ce qu'il veut c'est de sélectionner une plage de colonnes en fonction d'une variable (un entier O par exemple)!
Il connait l'adresse de sa colonne de départ mais pas celle de la fin, enfin si, c'est l'adresse de la première colonne décalée de O.  
 
Bons codes mais il ne connait pas bien la classe "Cells".  

Citation :

LettreColonne = Split(Cells(1, numéro de colonne).Address(1, 0), "$" )(0)


Citation :

   Dim maplage as range
    With Feuil1 ' à adapter
        Set maplage = .Range(.Cells(Firstcolumn, Firstline), .Cells(lastcolumn, lastline))
    End With


 
On peut faire abstraction de la lettre de colonne!
 
On a un entier "O" représentant le nombre de groupe.
 

Citation :

Sh.Range(Columns(2), Columns(O + 1)).Select


Avec "Columns(2)" faisant référence à la colonne de départ soit "B" et "Columns(O + 1)" la colonne de fin!

Reply

Marsh Posté le 18-03-2014 à 17:29:39    

Ca marche du feu de dieu
 
Merci à tous !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed