Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA: Boucler une plage

  • Initiateur de la discussion Initiateur de la discussion yeti_yeti
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Y

yeti_yeti

Guest
Bonjour à tous,

J'aimerais que si une plage des colonnes O à S est vide (ligne variable de 3 à 12), ma macro fasse son action.

J'ai déjà essayé ma macro avec des cellules variables et elle marche très bien, mais je n'arrive pas a trouver comment faire avec une plage variable.

Voici mon code, si qqn pouvait me donner un petit coup de main, ca serait parfait ;-)

Code:
        For p = 3 To 12     
                If [COLOR="Red"][B]Range("O" & p & ":S" & p & "")[/B][/COLOR].Count = 0 Then
                ...
                End If
        Next p

Merci d'avance
A+

YeTi
 
Re : VBA: Boucler une plage

Hum... J'ai essayé d'adapter ton bout de code mais ca n'a pas marché comme je le voulais... Je pense que j'ai meilleur temps de poster mon code au complet alors et de donner quelques explications.

En gros j'ai une liste de 30 joueurs de football qui savent jouer à des postes différents (gardien, attaquant, ...). Sur ces 30 joueurs, il y a des titulaires ("ü" dans le code) et des remplaçants ("~" dans le code) qui sont disponibles suivant les dates de matches.

Tout d'abord la première partie (qui fonctionne très bien). On copie tous les joueurs titulaires disponibles ce jour là et qui sont capable de jouer à ce poste.

Code:
'On copie les joueurs titulaires
    For j = 2 To 50     'joueurs
        For p = 3 To 12     'positions
            For cj = 15 To 19   'coller joueurs
                If Cells(j, p) = "ü" And Cells(p, cj) = "" Then
                Cells(j, 1).Copy
                Cells(p, cj).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                Exit For
                End If
            Next cj
        Next p
    Next j

Ensuite avec la seconde, j'aimerais que si une des plages des colonnes O à S est entièrement vide (ce qui signifierais qu'aucun joueur titulaire ne peut jouer à ce poste), alors on copie les remplaçant disponibles...

Code:
'S'il n'y a aucun joueur titulaire n'est disponible, alors on prend les remplaçants
    For j = 2 To 50     'joueurs
        For p = 3 To 12     'positions
            For cj = 15 To 19   'coller joueurs
                If Cells(j, p) = "~" And [COLOR="Red"][B]Range("O" & p & ":S" & p & "")[/B][/COLOR].Count = 0 Then
                Cells(j, 1).Copy
                Cells(p, cj).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                Exit For
                End If
            Next cj
        Next p
    Next j

Comment faire marcher ça?

Merci 🙂
 
Re : VBA: Boucler une plage

re:

pas sur d'avoir compris m'enfin on essaye

Code:
'S'il n'y a aucun joueur titulaire n'est disponible, alors on prend les remplaçants
    For j = 2 To 50     'joueurs
        For p = 3 To 12     'positions
            nbj = 0 
            For cj = 15 To 19   'coller joueurs
                if cells(j,cj) = "" then nbj = nbj + 1
            next cj 
            If Cells(j, p) = "~" And nbj = 5 Then
                Cells(j, 1).Copy
                Cells(p, cj).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                Exit For
            End If
        Next p
    Next j
 
Re : VBA: Boucler une plage

Malheureusement ce n'est pas tout à fait ça que j'espérais que ça fasse...
En fait le code devrait être singulièrement le même que le précédent...

Code:
'On copie les joueurs ayant leur poste naturel
    For j = 2 To 50     'joueurs
        For p = 3 To 12     'positions
            For cj = 15 To 19   'coller joueurs
                If Cells(j, p) = "ü" And Cells(p, cj) = "" Then
                Cells(j, 1).Copy
                Cells(p, cj).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                Exit For
                End If
            Next cj
        Next p
    Next j

La seule ligne qui doit changer, à mon avis, c'est celle ci:
Code:
                If Cells(j, p) = "ü" And Cells(p, cj) = "" Then

qui devrait être remplacée par

Code:
                If Cells(j, p) = "[COLOR="Magenta"][B]~[/B][/COLOR]" And [COLOR="Red"]Cells(p, cj) = "" Then[/COLOR]

Le truc c'est que là le programme ne doit pas chercher une cellule vide, mais une plage complète et c'est ça que je n'ai pas réussi à faire... C'est pour ca que j'ai essayé de faire qqch comme Range("O" & p & ":S" & p & "").Count = 0 mais qui ne marche pas non plus...

Si personne n'a de solution ce n'est pas grave, je vais essayer de trouver un autre moyen de faire.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
588
Réponses
7
Affichages
916
Réponses
5
Affichages
753
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…