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.