Flux rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[VBA] Faire un boucle dans le code

ecnet, le dimanche 2 juillet 2006 à 22:08:37
Bonjour,

J'ai voulu créer un boucle capable de faire la même procédure pour chaque macro. Or je ne sais pas comment faire pour simplifier les choses et s'il y a des fautes de syntaxe. En effet, quand j'ai voulu exécuter la macro ci-dessous, les erreurs de compilation s'affichent: tableau attendu ou encore next sans for. Quelqu'un pourra-il voir ce qui n'allait pas dans mon code? Merci.

Mon code actuel:

Sub Macro1()


'Conversion du libellé GB en libellé FR
'
Dim vecteur_GB(1 To 6) As String
Dim vecteur_FR(1 To 6) As String
Dim j As Single

'Sheets("Base").Select
'Range("B2").Select

For j = 1 To 6
vecteur_GB(j) = Sheets("Base").Range("B2").Offset(j - 1, 0).Value
Next j

For j = 1 To 6
If vecteur_GB(j) = "Déjeuner" Then
vecteur_FR(j) = "Dîner"
ElseIf vecteur_GB(j) = "Matin" Then
vecteur_FR(j) = "Soir"
End If
Next j

For j = 1 To 6
Sheets("Base").Range("J2").Offset(j - 1).Value = vecteur_FR(j)
Next j



' Conversion des libellés CH en libellé PL

Dim vecteur_CH(1 To 6) As String
Dim vecteur_PL(1 To 6) As String
Dim k As Single

'Sheets("Base").Select
'Range("C2").Select


For k = 1 To 6
vecteur_CH(k) = Sheets("Base").Range("C2").Offset(k - 1, 0).Value
Next k

For k = 1 To 6
If vecteur_CH(k) = "AB" Then
vecteur_PL(k) = "CD"
ElseIf vecteur_CH(k) = "EF" Then
vecteur_PL(k) = "GH"
ElseIf vecteur_CH(k) = "IJ" Then
vecteur_PL(k) = "KL"
End If
Next k


For k = 1 To 6
Sheets("Base").Range("K2").Offset(k - 1).Value = vecteur_PL(k)
Next k


End Sub

Par ailleurs, si on veut remplacer les données d'une feuille sur une autre feuille, suffira-t-il de remplacer le mot "base" par le nom d'un autre onglet dans lequel contiennent les données de départ?
Répondre à ecnet  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Kobaya, le dimanche 2 juillet 2006 à 22:55:03
salut ecnet,

je n'ai eu eucun pb avec ton code.

oui, en changeant le nom de la feuille (entre guillemets), tu pourras utiliser ton code pour une autre feuille.

A+,
Kobaya.
Répondre à Kobaya

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ecnet, le lundi 3 juillet 2006 à 12:16:28
Merci pour ton aide. J'ai réssayé mon code et effectivement, ça marche.

J4ai pourtant encore une question qui reste en suspens, quel code dois-je ajouter si:

If vecteur_CH(k) = "AB" and "12" Then
vecteur_PL(k) = "CD"

Traduction de ce que j'aimerais faire: si les conditions AB et 12 sont remplies, alors on remplacera la cellule k par CD.

J'ai aussi une deuxième question: comment tu as pu voir dans mon code précédent, j'ai un certain nombre de macros qui font la même chose: for i=1 to 3000, etc. Comment écrire en une fois cette partie pour ne pas répéter à chaque fois lorsque'on écrit un macro?

Merci beaucoup!
Répondre à ecnet

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Kobaya, le lundi 3 juillet 2006 à 14:31:22
voici les deux boucles fusionnées en une seule :
Sub Macro1()
    Dim vecteur_GB(1 To 6)  As String
    Dim vecteur_FR(1 To 6)  As String
    Dim vecteur_CH(1 To 6)  As String
    Dim vecteur_PL(1 To 6)  As String
    Dim j                   As Single
    
    For j = 1 To 6
        vecteur_GB(j) = Sheets("Base").Range("B2").Offset(j - 1, 0).Value
        vecteur_CH(j) = Sheets("Base").Range("C2").Offset(j - 1, 0).Value
    Next j
    For j = 1 To 6
        Select Case vecteur_GB(j)
            Case "Déjeuner"
                vecteur_FR(j) = "Dîner"
            Case "Matin"
                vecteur_FR(j) = "Soir"
        End Select
        
        Select Case vecteur_CH(j)
            Case "AB"
                vecteur_PL(j) = "CD"
            Case "EF"
                vecteur_PL(j) = "GH"
            Case "IJ"
                vecteur_PL(j) = "KL"
        End Select
    Next j
    For j = 1 To 6
        Sheets("Base").Range("J2").Offset(j - 1).Value = vecteur_FR(j)
        Sheets("Base").Range("K2").Offset(j - 1).Value = vecteur_PL(j)
    Next j
End Sub


Par contre, je ne comprends pas "si les conditions AB et 12 sont remplies". La valeur 12 est-elle contenue dans une variable ? Est-ce du texte (String) ou du numérique (Integer ou Byte) ?
A+,
Kobaya.
Répondre à Kobaya

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ecnet, le lundi 3 juillet 2006 à 17:13:46
Le code est devenu effectivement beaucoup plus léger d'un coup.

Je reformule ma deuxième question autrement:

Dans le code que tu vu pour la première fois, je prends l'exemple de "If vecteur_CH(k) = "AB" Then
vecteur_PL(k) = "CD"
...

Ce que je voulais faire maintenant, c'est de pouvoir ajouter une condition dans "If vecteur_CH = "AB" (et "GH" dans une cellule d'une autre colonne mais de la même ligne) Then
vecteur_PL(k) = "CD"

Quelle bon code dois-je entrer?

Suffit-il d'ajouter comme suit: If vecteur_CH = "AB" and "GH"..., mais ça ne marche pas? ou alors il faudrait que je fais:

For k=1 To 6
vecteur _CH(k) = Sheets("Base").Range("C2" et "P2").Offset(k-1,0).Value
Next k

NB: "P2" étant cette "autre" colonne

J'espère que tu pourras m'aider sur ce point.
Répondre à ecnet

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Kobaya, le lundi 3 juillet 2006 à 17:24:29
dans ce cas, il faut créer un tableau supplémentaire (ex. vecteur_X() qui sera initialisé avec les valeurs contenues dans la colonne P), et le test doit avoir 2 comparaisons :
If vecteur_CH(j) = "AB" and vecteur_X(j) = "GH' Then
   ...
End If
A+,
Kobaya.
Répondre à Kobaya

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ecnet, le lundi 3 juillet 2006 à 21:33:16
Si je fais:

Select Case vecteur_CH(j)
Case "AB" and vecteur_X(j) = "GH'
vecteur_PL(j) = "CH"
...
End If

Il y a un problème de définiton du vecteur_X(j).

Apparemment, il faut définir le vecteur_X(j), mais comment si je reprends ton code que tu m'avais donné? Sous quelle synthaxe dans la boucle? En écrivant:
vecteur_X(j) = Sheets("Base").Range("A2").Offset(j - 1, 0).Value, ça ne marche pas? Pourquoi?
Répondre à ecnet

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Kobaya, le mardi 4 juillet 2006 à 00:33:24
Case "AB" and vecteur_X(j) = "GH' :
ça, c'est pas possible !

pour vecteur_X(), tu dois pouvoir le remplir comme tu remplis vecteur_PL(), non ?
A+,
Kobaya.
Répondre à Kobaya

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 ecnet, le mardi 4 juillet 2006 à 09:59:56
Je précise encore alors.

Ce que je voulais, c'est si dans la colonne nommée CH, on a "AB" et dans la colonne CD, on a "GH", alors dans la colonne PL, on a "LM". "AB", "GH" et "LM" sont à la même ligne.

2ème question: tu sais comment lier les données de la plage E3 à G6 d'une feuille sur une autre de la plage K3 à M6?
Répondre à ecnet
[VBA] + boucle simple (Résolu)Bonjour, J'aimerais avoir une aide sur VBA concernant une boucle sous Excel Exemple : Dans le premier onglet d'un classeur j'ai en colonne A differentes données comme des prénoms dans le désordre : 1 ligne avec 'Bernard' 2... www.commentcamarche.net/forum/affich-4111053-vba-boucle-simple
Vba excel code identique dans x userform (Résolu)Bonjour,j'ai plusieurs userform qui contiennent chacun du code identique ex: ActiveCell.FormulaR1C1 = TXT_Num_Fiche.Value ActiveCell.Next.Select ActiveCell.FormulaR1C1 = TXT_DateDde.Value ActiveCell.Next.Select ActiveCell.FormulaR1C1 =... www.commentcamarche.net/forum/affich-3935039-vba-excel-code-identique-dans-x-userform
[VBA] Boucle for (Résolu)SALUT LES COPAINNNS hmm.. (soyons sérieux un moment !!) ^^ Voila j'ai une macro qui utilise une boucle FOR; MON probléme est je voudrai appliquer la boucle FOR non pas sur toutes les cellules d'une colonne mais sur=> UNE colonne avec un... www.commentcamarche.net/forum/affich-6344282-vba-boucle-for
VBA et les collections d'objets.VBA et les collections d'objets Quand plusieurs (beaucoup de) contrôles sont mis sur une feuille ou un Userform il est parfois fastidieux d'écrire du code dans chaque évènement des contrôles. Ce Tuto vous permet de traiter vos contrôles comme... www.commentcamarche.net/faq/sujet-10397-vba-et-les-collections-d-objets
Explication code vba (Résolu)Bonjour, Je ne comprend pas très bien le code & chr(10) & Voila mon code: Range("A1").Value = "ETAT DES DECISIONS" & Chr(10) & "DU __/__/2008 AU __/__/2008" Je c'est que cela a pour fonction le retour à la ligne automatique, mais quand je change... www.commentcamarche.net/forum/affich-5843910-explication-code-vba
[VB] Boucle (Résolu)Bonjour, Je débute en VB et j'aimerais savoir s'il est possible de faire une boucle dans une déclaration de variables. En effet, j'ai fait un programme qui va chercher des données dans x feuilles Excel et plutôt que d'effectuer x... www.commentcamarche.net/forum/affich-1480387-vb-boucle
[VB] Copier une feuille sans son code (Résolu)Bonjour, Voilà mon problème, je souhaite exporter une feuille Excel d'un classeur, la totalité de la feuille (valeurs, formats et objets). Ensuite, je supprime les boutons devenus inutiles. Le problème est que le code de cette feuille est copié... www.commentcamarche.net/forum/affich-3106592-vb-copier-une-feuille-sans-son-code
Toutes les réponses pour « [VBA] Faire un boucle dans le code »