[Déplacé vb.Net -> VBA] VERIFIER UNE CONDITION SUR 12 FEUILLES AVEC LA MEME COMM

Résolu
NANY1012 Messages postés 7 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 5 juillet 2009 - 3 juil. 2009 à 18:33
NANY1012 Messages postés 7 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 5 juillet 2009 - 5 juil. 2009 à 13:15
Bonjour,
J'ai commencé une macro qui me sert de formulaire de saisie,elle fonctionne bien. Mais maintenant je souhaiterai que le programme me dise si une saisie et déjà écrite dans les cellules de destination (12 feuilles au total identique 1 par mois ).
Pour la saisie j'utilise la fonction on while et offset.
J'essaie de faire la même chose pour la commande de vérification .
Voici le code:
Dim i As Integer
i = 0
Do While Sheets("janvier").Range("B9").Offset(i, 0).Value <> Sheets("Formulaire").Range("B5").Value And i < 65
i = i + 1
Loop

If Sheets("janvier").Range("B9").Offset(i, 2).Value <> 1 Then
Else
i = 0
Do While Sheets("février").Range("B9").Offset(i, 0).Value <> Sheets("Formulaire").Range("B5").Value And i < 65
i = i + 1
Loop

If Sheets("février").Range("B9").Offset(i, 2).Value <> 1 Then

Dim info1 As Integer

info1 = MsgBox("!!!INFO!!! Une saisie sur la même date a déjà été faites,toutes les anciennes données seront effacées!!!INFO!!! ", vbYesNo + vbInformation, "infos")

If info1 = 7 Then
Exit Sub
End If
End If

J'ai mis le <> 1 mais je ne connais pas le code pour dire que la cellule est vide ,l'idéal serait que la vérification soit sur "offset de (i,2) à (i,22)ce qui correspondant à la ligne de saisie.

Le code précedent fonctionne uniquement sur la feuille de janvier mais pas sur celle de février,alors pour la suite... je suis perdu....

Si toutefois quelqu'un peut m'aider un peu ...
Merci à tous

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 juil. 2009 à 03:29
Salut
Le VB de Excel n'est pas du .Net ---> Catégorie modifiée

Texte illisible, pas le courage de remettre en forme.
Tu peux t'adresser à une feuille de deux manières :
- par son nom, comme tu l'as fait, avec Sheet("Janvier")
- par son numéro, avec Sheet(1), en suppoosant que tu as mis Janvier dans la première Feuille.
A partir de là, il te suffit de faire un niveau de boucle supplémentaire pour remplacer le 1 par un chiffre allant de 1 à 12, etc.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 juil. 2009 à 17:36
Re
Tu as une curieuse façon d'indenter ton code.
Non, je ne ferait pas ton code, c'est à toi de reflechir avec les indications que je t'ai données.
Des boucles, tu sembles savoir les faire.
Qu'y a t-il de compliqué à faire une boucle de 1 à 12 ?
Dans ton code, je ne sais pas à quoi tu veux arriver car, après être sorti de tes boucles, tu as une valeur 'i' mais tu n'en fais rien.
Bizarre.
Si tu es sensé retrouver une valeur dans un Range, applique la technique simple :
   Dim bTrouvé As Boolean
   Dim mCellule As Object
   Sheets("Janvier").Select
   bTrouvé = False
   For Each mCellule In Range("B9:B74")
      If mCellule.Value = Sheets("Formulaire")... Then
         bTrouvé = True
         Exit For
      End If
      DoEvents
   Next
   If bTrouvé Then
      MsgBox ...
   End If
Il y a d'autres solutions, comme le Find ...
3
NANY1012 Messages postés 7 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 5 juillet 2009
4 juil. 2009 à 11:02
Bonjour,
Merci pour la réponse Jack, je vais essayer de mieux m'expliquer.

J'ai remis le code dans un format plus lisible, pour la boucle j'ai essayé mais au dela de 2 feuilles le msg ne s'active pas même si dans les cellules de la feuille de destination il y a des valeur.
La démarche est que la cellule B5 de la feuille formulaire est une date . La recherche se fait à partir de la cellule B9 des feuilles et vérifie les dates puis lorsque la date est trouvée ,il faudrait vérifier les cellules de "offset(i,2)à offset(i,22),...mais là cela se corse est le programme fonctionne uniquement sur la feuille "janvier".
J'ai un problème avec la boucle
Sinon j'ai aussi une question comment dois t on coder pour une la vérification d'une cellule vide
dans une feuille (la cellule contient une formule...est la je coince encore...)
Je débute vraiment .....
Voici le code mis en forme:

Dim i As Integer

i = 0

Do While Sheets("janvier").Range("B9").Offset(i, 0).Value <> Sheets("Formulaire").Range("B5").Value And i < 65

i = i + 1

Loop

If Sheets("janvier").Range("B9").Offset(i, 2).Value <> 1 Then

Else

i = 0
Do While Sheets("février").Range("B9").Offset(i, 0).Value <> Sheets("Formulaire").Range("B5").Value And i < 65

i = i + 1

Loop

If Sheets("février").Range("B9").Offset(i, 2).Value <> 1 Then

Dim info1 As Integer
info1 = MsgBox("!!!INFO!!! Une saisie sur la même date a déjà été faites,toutes les anciennes données seront effacées!!!INFO!!! ", vbYesNo + vbInformation, "infos")

If info1 = 7 Then
Exit Sub
End If
End If
End if

En espérant que quelqu'un pourra déchiffrer ce que je veux faire...
Merci à tous
0
NANY1012 Messages postés 7 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 5 juillet 2009
4 juil. 2009 à 11:10
RE
Je viens de voir que la mise en forme que j'ai saisie dans le formulaire de réponse du site ne s'applique pas , comment faites vous pour faire apparaitre les saut de lignes ,espaces...etc .
Mon message arrive tout de rang.

Merci à vous
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NANY1012 Messages postés 7 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 5 juillet 2009
4 juil. 2009 à 16:58
Bonjour à tous et désolé pour la multiplication de ce message.

Ouf enfin je peux transmettre ce message correctement

Merci pour la réponse Jack, je vais essayer de mieux m'expliquer.
 J'ai remis le code dans un format plus lisible, pour la boucle j'ai essayé mais au dela de 2 feuilles le msg ne s'active pas même si dans les cellules de la feuille de destination il y a des valeur.
La démarche est que la cellule B5 de la feuille formulaire est une date .
La recherche se fait à partir de la cellule B9 des feuilles et vérifie les dates puis lorsque la date est trouvée ,il faudrait vérifier les cellules de "offset(i,2)à offset(i,22),...mais là cela se corse est le programme fonctionne uniquement sur la feuille "janvier".
J'ai un problème avec la boucle
Sinon j'ai aussi une question comment dois t on coder pour une la vérification d'une cellule vide dans une feuille (la cellule contient une formule...est la je coince encore...) Je débute vraiment .....
Voici le code mis en forme:

Dim i As Integer
i = 0
    Do While Sheets("janvier").Range("B9").Offset(i, 0).Value <> Sheets("Formulaire").Range("B5").Value And i < 65
       i = i + 1
 Loop   
             If Sheets("janvier").Range("B9").Offset(i, 2).Value <> 1 Then
                Else
 i = 0
    Do While Sheets("février").Range("B9").Offset(i, 0).Value <> Sheets("Formulaire").Range("B5").Value And i < 65 
      i = i + 1 
   Loop 
                  If Sheets("février").Range("B9").Offset(i, 2).Value <> 1 Then

Dim info1 As Integer
 
   info1 = MsgBox("!!!INFO!!! Une saisie sur la même date a déjà été faites,toutes les anciennes données seront effacées!!!INFO!!! ", vbYesNo + vbInformation, "infos") 
                        If info1 = 7 Then
 Exit Sub
          End If
             End If 
               End if
 
En espérant que quelqu'un pourra déchiffrer ce que je veux faire...

Merci à tous
0
NANY1012 Messages postés 7 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 5 juillet 2009
5 juil. 2009 à 13:15
Bonjour,


Merci pour la réponse , je ne connaissais pas cette fonction.


Mais pour mon problème tu as raison,je vais essayer la fonction Find, car je dois chercher la valeur de la cellule B5 de ma feuille "Formulaire" dans une de mes 12 autres feuilles dans Range("B9:B74) sans me positionner dessus mais ensuite vérifier si la cellule se trouvant à droite de celle trouvée est vide ou <>1
Alors si <>1 le msgbox s'active.

Si tu peux me montrer un code en Find afin que je puisses comprendre le fonctionnement ou bien m'expliquer le principe de code...
En te remerciant
.
Bonne fin de journée..........
0
Rejoignez-nous