Boucle sur plage de cellules

lynyrd

XLDnaute Impliqué
Bonjour le forum
Pouvez-vous m'indiquer comment réaliser une boucle sur une plage de cellules
dans le fichier ci-joint.
Merci de votre aide.
 

Pièces jointes

  • boucle.xls
    19 KB · Affichages: 61
  • boucle.xls
    19 KB · Affichages: 65
  • boucle.xls
    19 KB · Affichages: 64

Dull

XLDnaute Barbatruc
Re : Boucle sur plage de cellules

Salut lynyrd, le Forum

Peut-être comme cela dans un module standard

Code:
Option Explicit
Dim C As Range, i As Byte

Sub EssAi()
For i = 1 To Sheets.Count
    For Each C In Sheets("Feuil" & i).Range("C4:C19")
        Select Case C.Value
            Case "petu": C.Offset(0, -1) = 1
            Case "puco": C.Offset(0, -1) = 2
            Case "pace": C.Offset(0, -1) = 3
            Case "puci": C.Offset(0, -1) = 4
            Case Else: C.Offset(0, -1) = ""
        End Select
    Next C
Next i
End Sub

Bonne Journée
 

laurent950

XLDnaute Accro
Re : Boucle sur plage de cellules

Bonjour lynyrd,

J'ai trouver cette boucle qui je pense dois correspondre a votre attente

VB:
Sub test()

Dim ws As Worksheet

For Each ws In Worksheets
    For i = 4 To 19
        If ws.Cells(i, 3) = "petu" Then
            ws.Cells(i, 2) = 1
        ElseIf Cells(i, 3) = "puco" Then
            ws.Cells(i, 2) = 2
        ElseIf Cells(i, 3) = "pace" Then
            ws.Cells(i, 2) = 3
        ElseIf Cells(i, 3) = "puci" Then
            ws.Cells(i, 2) = 4
        End If
    Next i
Next ws

End Sub
Au plaisir
Laurent
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Boucle sur plage de cellules

Bonjour lynyrd, Dull, Laurent,

Je suis à la bourre mais, comme je l'ai fait d'une manière différente, je le joins :

Code:
Sub Demo()
texte = Array("petu", "puco", "pace", "puci")
For Each sh In Sheets
  For Each cel In sh.Range("C:C").SpecialCells(xlCellTypeConstants)
    For i = LBound(texte) To UBound(texte)
      If cel.Value = texte(i) Then cel.Offset(0, -1) = i + 1
    Next
  Next
Next
End Sub
Traitement rapide par le biais d'un tableau (à saisir dans un module standard bien évidemment).

Cordialement.
 

laurent950

XLDnaute Accro
Re : Boucle sur plage de cellules

Bonjour Dull, Papou-net.

J'ai repris votre exemple de Array Papou-net pour compresser encore mon code cela servira d'exemple a "lynyrd" pour progresser en VBA

je join le code :


VB:
Sub test()

Dim ws As Worksheet
texte = Array("petu", "puco", "pace", "puci")

For Each ws In Worksheets
    For i = 4 To 19
        For j = 0 To UBound(texte)
            If ws.Cells(i, 3) = texte(j) Then
                ws.Cells(i, 2) = j + 1
            End If
        Next j
    Next i
Next ws

End Sub

Laurent
 
Dernière édition:

lynyrd

XLDnaute Impliqué
Re : Boucle sur plage de cellules

Je ne comprends pas,j'ai adapté le code de laurent950 à mes besoins et ca ne fonctionne pas.
y a t'il une erreur quelque part?
Merci.
 

Pièces jointes

  • TST-été2012-Semaine - Copie.zip
    32.8 KB · Affichages: 37

Gelinotte

XLDnaute Accro
Re : Boucle sur plage de cellules

Bonjour,

Deux coquilles : la première, dans les feuilles, il y a des majuscules et dans la macro tu recherches des minuscules.
If ws.Cells(i, 4) = "toca" Then
ws.Cells(i, 3) = 0
ElseIf Cells(i, 4) = "tora" Then
ws.Cells(i, 3) = 1

la deuxième coquille : dans la ligne Elseif, tu ne mentionnes pas où écrire; il faut écrire dans (ws)
If ws.Cells(i, 4) = "TOCA" Then
ws.Cells(i, 3) = 0
ElseIf ws.Cells(i, 4) = "TORA" Then
ws.Cells(i, 3) = 1

Sinon, ça semble fonctionner correctement, mais je n'ai pas tout vérifié.


G
 

Dull

XLDnaute Barbatruc
Re : Boucle sur plage de cellules

Re le fil

Attention TOCA <> toca

pour pallier à ce problème met un

Option Compare Text
en tête de Module

et il manque la reconnaissance des feuilles dans ElseIf

ElseIf ws.Cells(i, 4) = "TORA" Then

EDITION: Ouppppps... Désolé Gélinotte:eek: je n'ai pas rafraichit... je t'en doit un... CitronVert....Rafraichissant...:)

Bonne Journée
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Boucle sur plage de cellules

RE :

Ci-joint une version raccourcie de ton code.

Condition If...Then remplacée par Select Case...End Select :

Code:
Sub test()
Dim ws As Worksheet
For Each ws In Worksheets
     For i = 2 To 31
        Select Case UCase(ws.Cells(i, 4))
          Case "TOCA", "TORA"
            ws.Cells(i, 3) = 1
          Case "YOLA"
            ws.Cells(i, 3) = 2
          Case "GEXI"
            ws.Cells(i, 3) = 3
          Case "GECA", "GEMO", "GECO"
            ws.Cells(i, 3) = 4
          Case "GUMI", "GIGA", "GETO"
            ws.Cells(i, 3) = 5
          Case "GUMO", "GOCA"
            ws.Cells(i, 3) = 6
          Case "TOCA", "GULE"
           ws.Cells(i, 3) = 7
          Case "TOCA", "YECA"
            ws.Cells(i, 3) = 8
          Case "MOCA", "MICA", "MIMA"
            ws.Cells(i, 3) = 9
          Case "PUCI", "PECO", "PUCO"
            ws.Cells(i, 3) = 10
          Case "PICA"
            ws.Cells(i, 3) = 11
          Case "PACK"
            ws.Cells(i, 3) = 12
          Case "PICO"
            ws.Cells(i, 3) = 13
          Case "POCA", "POCI", "PULE", "PULO", "PUCA", "PICU", "PACA"
            ws.Cells(i, 3) = 14
          Case "PENA", "PEMA", "PEMI"
            ws.Cells(i, 3) = 15
          Case "PUCE", "PUMA", "PECI"
            ws.Cells(i, 3) = 16
          Case "PETO", "PACY", "PENU"
            ws.Cells(i, 3) = 17
          Case "PACI"
            ws.Cells(i, 3) = 18
          Case "PACE"
            ws.Cells(i, 3) = 19
          Case "COFA"
            ws.Cells(i, 3) = 20
          Case Else
             ws.Cells(i, 3) = ""
        End Select
    Next
Next
End Sub
Pour les erreurs de code, Dull et Gelinotte (que je salue) ont déjà répondu avec justesse.

Remarque : attention car ta première boucle balaie les deux premières feuilles, cela peut poser problème. A mon avis, il serait bon de créer une boucle indicée avec les n° d'index des feuilles horaires uniquement.

Espérant avoir aidé.

Cordialement.

PS : vérifie quand-même s'il n'y a pas d'erreur sur les codes des rames.
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Boucle sur plage de cellules

RE :

Pour illustrer mon propos sur le balayage des feuilles, voici le code modifié pour analyser les feuilles d'horaire uniquement :

Code:
Sub test()
Dim sh As Byte
For Each ws In Worksheets
  If InStr(ws.Name, "à") > 0 Then
     For i = 2 To 31
        Select Case UCase(ws.Cells(i, 4))
          Case "TOCA", "TORA"
            ws.Cells(i, 3) = 1
          Case "YOLA"
            ws.Cells(i, 3) = 2
          Case "GEXI"
            ws.Cells(i, 3) = 3
          Case "GECA", "GEMO", "GECO"
            ws.Cells(i, 3) = 4
          Case "GUMI", "GIGA", "GETO"
            ws.Cells(i, 3) = 5
          Case "GUMO", "GOCA"
            ws.Cells(i, 3) = 6
          Case "TOCA", "GULE"
            ws.Cells(i, 3) = 7
          Case "TOCA", "YECA"
           ws.Cells(i, 3) = 8
          Case "MOCA", "MICA", "MIMA"
            ws.Cells(i, 3) = 9
          Case "PUCI", "PECO", "PUCO"
            ws.Cells(i, 3) = 10
          Case "PICA"
            ws.Cells(i, 3) = 11
          Case "PACK"
            ws.Cells(i, 3) = 12
          Case "PICO"
            ws.Cells(i, 3) = 13
          Case "POCA", "POCI", "PULE", "PULO", "PUCA", "PICU", "PACA"
            ws.Cells(i, 3) = 14
          Case "PENA", "PEMA", "PEMI"
            ws.Cells(i, 3) = 15
          Case "PUCE", "PUMA", "PECI"
            ws.Cells(i, 3) = 16
          Case "PETO", "PACY", "PENU"
            ws.Cells(i, 3) = 17
          Case "PACI"
            ws.Cells(i, 3) = 18
          Case "PACE"
            ws.Cells(i, 3) = 19
          Case "COFA"
            ws.Cells(i, 3) = 20
          Case Else
             ws.Cells(i, 3) = ""
        End Select
    Next
  End If
Next
End Sub

Cordialement.
 
Dernière édition:

Dull

XLDnaute Barbatruc
Re : Boucle sur plage de cellules

Re le Fil :)

My Dear Papou:) tu m'énerve :mad::p:eek::)... t'est insupportable :cool: ...laisse l'ami questionneur répondre :eek:... Mais malgré tout... tu est Adorable de te préoccuper de notre ami en détresse.

Ne change rien...l'indien:D et décoche tes flèches aussi souvent que nécessaire ;)

Bonne Journée
 

laurent950

XLDnaute Accro
Re : Boucle sur plage de cellules

Hello !

Pour Info, parfois les cellules fusionnés sont à éviter dans Excel dans votre cas et pour exemple concret, la feuille Annonces n’était pas au bon format, je les reconstruite en base de donées pour pouvoir l’exploité par la suite :
- L’idée étant de garder cette feuille en mémoire (en variable tableau) ce qui évite la série de If et elseif contraignante ainsi que des Arrays à Remplir est à maintenir dans le code même.
- Ici je pense que c’était mieux ainsi
- Donc la feuille Annonces est gardée en mémoire nombre de ligne x les 3 colonnes


VB:
Option Compare Text ' ne pas tenir compte des majuscules/minuscules

Sub test2()
' PS : COLA n'existe pas dans vos données !! peut être "yola" ?
 
Dim ws As Worksheet

Dim Ann As Worksheet
Set Ann = Worksheets("Annonces")

Dim tabAnn As Variant
fin = Ann.Range("A65536").End(xlUp).Row

tabAnn = Ann.Range(Ann.Cells(3, 1), Ann.Cells(fin, 3))


 For Each ws In Worksheets
    If ws.Name <> "Codes Missions" And ws.Name <> "Annonces" Then
        finws = ws.Range("D65536").End(xlUp).Row
            For i = 2 To finws
                For j = 1 To UBound(tabAnn)
                    If ws.Cells(i, 4) = tabAnn(j, 1) Then
                        ws.Cells(i, 3) = tabAnn(j, 2)
                    End If
                Next j
            Next i
        finws = Empty
    End If
Next ws
 
End Sub

' PS : COLA n'existe pas dans vos données !! peut être "yola" ? (A corrigé ou a ajouter dans la feuille annonce de mon fichier)

Au plaisir de vous aider et répondre a vos question.
Laurent
 

Pièces jointes

  • TST-été2012-Semaine - Copie avec variable tableau.xlsm
    186.8 KB · Affichages: 54
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin