BOUCLE - VB/VBA/VBS - Programmation
Marsh Posté le 21-04-2005 à 10:46:07
En VBA je pourrais pas te dire la syntaxe ni la faisabilité, mais a priori avec une variable de type caractère, à laquelle tu ajoutes une valeur comprise entre 1 et 24, ça donnera ce que tu cherches. 
 
En effet, en raisonnant selon le code ASCII, A + 1 = B, A + 2 = C, etc. 
 
 
Exemple : 
| Soit L un caractère, défini comme "A"  | 
Marsh Posté le 21-04-2005 à 10:51:28
Salut 
J'avais fait un truc comme ca l'année dernière, voici le code. ( c'était fait en speed, et je ne l'ai pas regardé depuis, donc ca doit etre bien crade. C'est du VB ). 
 
Function incr_col(ByVal chaine As String) As String 
'fonction qui fait avancer d'une collone pour excel ( AZ -> BA ) 
Dim col As String 
Dim texte As String 
 
If col = "IV" Then 
    Call MsgBox("On a atteint le bout du tableau excel", vbCritical) 
    Exit Function 
End If 
 
If Len(chaine) = 1 Then 
    If chaine = "Z" Then 
        incr_col = "AA" 
    Else 
        incr_col = Chr(Asc(chaine) + 1) 
    End If 
Else 
Dim premier_passage As Boolean 
premier_passage = True 
    For i = Len(chaine) To 1 Step -1 
        c = Mid(chaine, i, 1)       
        If premier_passage = True Then 
            premier_passage = False 
            If c = "Z" Then 
                texte = "A" 
                retenue = True 
            Else 
                texte = Chr(Asc(c) + 1) 
            End If 
        Else 
            If c = "Z" Then 
                texte = texte & "A" 
                retenu = True 
            Else 
                If retenue = True Then 
                    texte = texte & Chr(Asc(c) + 1) 
                    retenue = False 
                Else 
                    texte = texte & c 
                End If 
            End If 
        End If 
    Next i 
    If retenu = True Then 
        texte = texte & "A" 
    End If    
    col = "" 
    For i = Len(texte) To 1 Step -1 
           col = col + Mid(texte, i, 1) 
    Next i 
    incr_col = col 
 End If 
End Function
Marsh Posté le 21-04-2005 à 11:14:39
euh utilise putot la fonction cells 
 
for I .. 
  for J ... 
     cells(I,J) 
 
 
 
tu peux parfaitement le combiner avec range 
 
range(cells(I1,J1),cells(I2,J2)).select 
 
Marsh Posté le 21-04-2005 à 11:18:02
Ca m'apprendra à répondre à un topic d'un langage que je ne connais pas.  
 
La solution de Fusion_sadam est de loin la plus élégante.
Marsh Posté le 21-04-2005 à 11:28:33
merci pour ces reponses... je n ai jamais fais de double boucle. 
Comment fais tu pour selectionner par exemple les cellules B3, C3, D3,... jusqu'à la cellule Y3 de cette ligne
Marsh Posté le 27-04-2005 à 14:46:49
pas besoin d'une double boucle : 
 
 
 
for i=1 to 25 
 
cells( 3,i) = ..... 
 
next i 
 
***** 
tu fais un pour de i = 1 a 25 ( ou 25 = Y dans les lettres de l'aplhabet ) 
 
tu change la valeur de la cellule de la ligne 3, de la colonne i ) ( ou i vaut ton nom de colonne en fait ...A,B,C,D,... ) 
 
tu termine le pour ...C'est un parcours dans un sens d'un vecteur en gros.
Marsh Posté le 19-05-2005 à 17:00:25
Bjr, 
J'essai de faire ceci. 
Voila, le premier colonne les noms, la 2ieme colonnes les prenoms et 3 ieme colonne l'etat de candidature(Admis ou pas admis). Donc j'essai de faire un macro qui copie tous les gens qui sont admis. 
Voilà ce que j'ai fait et ça plante. 
For Each Cll In Sheets("Feuil1" ).Range("D2:D30" ) 
   If Cll.Value = "Admis" Then 
         
        For i = 2 To 25 
            For j = 1 To 2 
             
                    Range(Cells(j, i), Cells(j + 1, i)).Select 
                    Range(Cells(j + 1, i)).Activate 
                    Selection.Copy 
                    Range("A39" ).Select 
                    ActiveSheet.Paste 
                    ActiveSheet.Paste 
                    Application.CutCopyMode = False 
             Next j 
         Next i 
               
     End If 
Next Cll 
End Sub 
 
Quelqu'un peut m'aider? mes remerciements
Marsh Posté le 19-05-2005 à 17:35:48
Voilà une macro qui fait ça sur les colonnes A,B,C 
J'ai pas bien compris à quoi sert le "range("D2:D30" ) dans ta macro.* 
 
Sub Test() 
For Each o In Range("C2:C30" ) 
If o.Value = "Admis" Then 
i = o.Row 
Cells(39 + k, 1).Value = Cells(i, 1) & " " & Cells(i, 2) 
k = k + 1 
End If 
Next 
End Sub 
 
Les admis sont reportés à partir de la cellules A39... 
A+
Marsh Posté le 24-05-2005 à 13:27:59
do while feuil1.cells(1,i) <>"" 
if feuil1.cells(3.i).value="admis" then 
   feuil2.cells(1,k)=feuil1.cells(1,i) 
   feuil2.cells(2,k)=feuil1.cells(2,i) 
   feuil2.cells(3,k)=feuil1.cells(3,i) 
   k=k+1 
endif 
i=i+1 
loop 
 
tu peux faire ça aussi ( ou un truc du meme genre)
Marsh Posté le 21-04-2005 à 10:17:54
J ai un petit souci... j aimerais pouvoir selectionner les cellules B3, C3, D3, ... , Y3 avec une boucle en faisant varier donc la lettre correspondant à la colonne
le programme suivant conviendrait si la variable était une ligne (A6, A7, A8,..., A24)
Dim i As Long
For i = 6 To 24
Dim X as Variant
VarX = Range("A" & i)
mais là je voudrais une astuce similaire Range(i & 3) en quelque sorte encore faudrait il bien definir i.
Merci par avance.