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

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


Bonjour

comme ceci peut-être

 
Re : Simplifier un code VBA

Re,

merci à tous les 2.
les 2 codes fonctionnent. Pour le code de Gilbert k=0 to 2 correspond aux 3 conditions de Array?

Je vais continuer à abuser de vos connaissances. Dans mon exemple, le résultat de la recherche s'inscrit en cellule A19,A20....
Si mes cellules de destination se trouvent dans un autre classeur je dois le coder comment?

Merci d'avance
 
Re : Simplifier un code VBA


oui k = 0 to 2 c'est bien le nombre de valeurs de l'array


pour la seconde question il faut marquer workbook("tartempion").sheets(x).range("A"&j)

x étant le numéro de la feuille
workbook("tartempion") fonctionne s'il est ouvert
 
Dernière édition:
Re : Simplifier un code VBA

Re,

avant même d'envoyer le résultat de la recherche sur un autre classeur, le code s'arrête là :
Code:
If Cells(i, col) = rep(k) Then

je n'arrive pas à comprendre pourquoi
le code complet :
Code:
Sub ChoixDate()

Dim Annee As Integer

    
'saisie de la date
Application.ScreenUpdating = False: Application.DisplayAlerts = False
saisie_date:
datedesaisie = InputBox(("Saisir la date de la garde que vous souhaitez consulter sous la forme jj/mm/aaaa"))
   
    Annee = Format(datedesaisie, "yyyy")

   

If datedesaisie = "" Then
Exit Sub
End If
If Not IsDate(datedesaisie) Then
        MsgBox "Format de date incorrect !"
        GoTo saisie_date
End If
'ouverture du classeur CDS
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & "CDS " & Annee & ".xlsm"

'ouverture sur le feuille du mois
ActiveWorkbook.Sheets(Format(datedesaisie, "mmmm")).Select

'recherche de la colonne du jour
col = Format(datedesaisie, "dd")
rep = Array("G", "GW", "J", "GWS")

 j = 19
             
             derligne = Sheets(Format(datedesaisie, "mmmm")).Range("A18").End(xlUp).Row
             rep = Array("G", "GW", "J", "GWS")
 For k = 0 To 3
 For i = 7 To derligne
 If Cells(i, col) = rep(k) Then
 Range("A" & j) = Cells(i, 1)
 j = j + 1
 End If
 Next i
 Next k 
 End Sub

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

Pour être plus clair :
le code fonctionne lors d'une saisie du jour en F1 (sur le fichier hypo78)
lorsque je pars d'une Userbox sur un classeur pour chercher les données dans un autre çà ne fonctionne plus (GD et CDS 2014)
 

Pièces jointes

Re : Simplifier un code VBA

col = est en format TXT

alors il faut convertir en nombre

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

voilà les fichiers avec les modifications

remettre Application.DisplayAlerts = sur false dans le programme j'ai oublié 😎
 

Pièces jointes

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

Re Gilbert,
trop fort pour moi, çà fonctionne à merveille.
je vais tenter de faire la suite pour importer le résultat directement sur le fichier GD.
encore mille merci.

Peux-tu m'expliquer :
Code:
[a2].Select
Je te tiens informé de la suite.
Bon WE
 
Dernière édition:
Re : Simplifier un code VBA

Encore moi....

Pour importer dans mon premier classeur j'ai bien trouvé la solution du copier/coller en VBA qui fonctionne, mais comment dire que les cellules de destinations sont dans mon premier classeur (gd) ce qui m'éviterait de créer ces cellules intermédiares contenant le résultat de la recherche (CDS 2014)?

Code:
Range("A" & j) = Cells(i, 1)

en citant mon 1er classeur avec un .activate avant Range(......) mais pour = Cells (i,1) qui correspond à l'autre classeur....

Merci d'avance
 
Dernière édition:
Re : Simplifier un code VBA

Bonjour Hypo78;

Il ne serait pas judicieux d'utiliser les capacités d'Excel pour la recherche au lieu de faire des boucles imbriquées.
Essai, d'activer l'enregistrement d'une macro et fait un test de recherche via la fonction recherche d'Excel, Arrêt la macro et consulte le module. Tu as la solution.
Il ne te reste qu'a adapter la macro à tes besoins.

Cordialement
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…