Simplifier un code VBA

  • Initiateur de la discussion Initiateur de la discussion hypo78
  • 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 !

hypo78

XLDnaute Impliqué
Bonjour à tous,

j'ai un code VBA gracieusement élaboré par Chalet53 qui me permet de faire une recherche dans une colonne.
Lorsque j'ai demandé ce code, la recherche s'effectuait sur une condition -> G
Dans mon utilisation, il faut que je cherche les "G" mais aussi pleins d'autres conditions (GW, GWS, J....)

Comment peut-on écrire OU en VBA plutôt que de faire comme j'ai fait ci dessous
Code:
For i = 7 To derligne
             If Cells(i, col) = "G" Then
             Range("A" & j) = Cells(i, 1)
             j = j + 1
             End If
             Next i
             For i = 7 To derligne
             If Cells(i, col) = "GW" Then
             Range("A" & j) = Cells(i, 1)
             j = j + 1
             End If
             Next i


Merci d'avance
 
Re : Simplifier un code VBA

je ne comprends pas où tu veux mettre les données

voilà une amélioration du précédent

en exemple saisir le 3/01/2014
puis le 2/01/2014


😎
 

Pièces jointes

Dernière édition:
Re : Simplifier un code VBA

Bonjour Gilbert,

ta nouvelle proposition est intéressante et va sûrement m'éviter quelques lignes de code.
Pour ta première question, je voudrais que les données soient importées dans le classeur GD, pour l'exemple du classeur CDS, le nom du personnel doit apparaitre en B13 pour celui qui a un G. J'y arrive avec un "vulgaire" copier/coller mais si je pouvais éviter de passer par une écriture dans le classeur CDS dans certains cas çà va m'arranger, car dans mon projet j'ai quelques classeurs en lecture seule.

Merci
 
Re : Simplifier un code VBA

Re,

en commençant de monter mon projet avec les classeurs déjà existants, je viens de me rendre compte 🙁, que les tableaux sont sous cette forme (cellules fusionnées):
Capture d’écran 2014-01-19 à 14.14.03.jpg
Pour le coup il faut vraiment que l'on détermine col depuis une recherche sur la plage des jours...(B6 à BK6)

Avec l'enregistreur de macro je pense à un "truc" du genre
Code:
Range("B6:BE6").Select
    Selection.Find(What:=col).Activate
    colonne = ActiveCell.Column
çà a l'air de fonctionner
 
Dernière édition:
Re : Simplifier un code VBA

Re,
pour l'exemple j'ai associé seulement le classeur CDS, mais il y aura autant de classeurs que de spécialités visibles sur GD.
donc pour chaque spécialité, il y a 1 une cellule de destination, les seuls cas où on aura 2 cellules à remplir sont RCCI et CMIC.
Pour les colonnes jour et nuit, ce sera le même code seul le contenu des "array" sera différent.

en espérant avoir été clair.

exemple : si un G ou GS ou GW, le nom du personnel de garde dans le classeur CDS doit apparaitre dans la colonne garde de la GD à la ligne CDS
si un J, le nom apparaitra dans la colonne Jour de la GD.
ensuite je cherche dans un autre classeur, par exemple CMIC, et les 2 personnels ayant un G, apparaitront sur la GD à la ligne CMIC dans la colonne garde.....
 
Dernière édition:
Re : Simplifier un code VBA

Donc voilà un exemple de ce que l'on peut faire

maintenant à vous la suite

moi je me suis arrêté à une msgbox à vous de placer au bon endroit après avoir fermé CDS
 

Pièces jointes

Re : Simplifier un code VBA

voilà avec l'enregistrement de CDS et la fermeture du fichier au cas où 😉 😎

vous pouvez remarquer que les données sont présentes et que le fichier CDS est clos donc le fichier actif reste gd ce qui vous permet de placer ces données là où vous le désirez
 

Pièces jointes

Dernière édition:
Re : Simplifier un code VBA

Re, mon pb c'est la suite justement.
C'est comment importer le résultat de la recherche sans l'inscrire au préalable dans une cellule du classeur CDS
comment remplacer cette cellule de destination
Code:
Range("A" & j + r) = Cells(i, 1)
par une cellule de mon classeur GD

Promis après j'arrête 😱

Encore merci
 
Re : Simplifier un code VBA

mes connaissances en VBA me limite dans la compréhension du code, du coup les données en mémoire à importer, je ne vois pas.
je vais prendre le temps de regarder tout çà, et je reviendrai ici.

Bonne fin de WE et encore merci
 
Re : Simplifier un code VBA

Bsr Gilbert,

avant de tenter d'utiliser les temp(i) et autres choses qui me sont encore étrangères j'ai testé un code simplifié sur 2 dates, le 1er Février et le 2 Février afin de voir si les gardes, les jours, les nuits fonctionnent.
Chose étrange çà fonctionne pour le 2 mais pas pour le 1, dans ce cas le code prend en compte le 10.... je n'arrive pas à voir d'où çà provient.
Si tu as qques minutes pour regarder je te joins les 2 fichiers.

Merci

Edit du lundi matin : je travaille ce matin avec les fichiers réels, et mauvaise surprise la plage de date (1,2,3.....) est le résultat d'une formule, comment puis-je coder ma recherche de colonne sur la valeur affichée?

Code:
 'recherche de la colonne du jour
    col = Format(datedesaisie, "dd")
    col = CInt(col)
    colonne = CInt(colonne)
    

    
    Range("O9:BW9").Select
    Selection.Find(What:=col).Activate
    colonne = ActiveCell.Column

Cordialement
 

Pièces jointes

Dernière édition:
Re : Simplifier un code VBA

Bjr,

je me réponds tout seul pour le problème d'inversion du 01 et du 10, et du résultat d'une formule
Code:
 Selection.Find(What:=col, LookIn:=xlValues, lookat:=xlWhole).Activate
 
Dernière édition:
- 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

Discussions similaires

Réponses
15
Affichages
788
Réponses
8
Affichages
392
Réponses
5
Affichages
914
Réponses
2
Affichages
257
Réponses
4
Affichages
281
Réponses
4
Affichages
735
Réponses
2
Affichages
528
Réponses
8
Affichages
783
Retour