IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recherche Colonne spécifique VBA [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Dev
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Par défaut Recherche Colonne spécifique VBA
    Bonjour à tous.

    Je cherche a balayer plusieurs feuilles d'un classeur pour récupérer des données spécifiques. Book1.xlsx
    J'ai tous les outils pour balayer mon classeur avec une boucle FOR, seulement, je galère sur la formule pour traiter mes données (Celle a mettre dans la boucle, ouais ouais).

    En effet, je voudrais par le biais d'un userform pouvoir "sélectionner" une colonne bien spécifique, dans le fichier en exemple, si je tape 1 dans mon userform, je voudrais analyser que la colonne B, si je tape 2 la colonne C etc.etc.

    L'idée étant au final de compter le nombre d’occurrence de tel ou tel critère (Un nb.si.ens qui viendrait récupérer le nombre de toto dans l'exemple de la colonne B si j'ai tapé 1).
    Quelqu'un aurait il une idée de formule que je pourrais appliquer dans ce cas ?

    En vous remerciant d'avance !
    @++

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour et bienvenue sur le forum

    Avant de répondre à ta question, petite remarque : beaucoup de membres n'ouvrent pas les pièces jointes => à lire : https://www.developpez.net/forums/d8...s-discussions/. Ajoute plutôt des copies d'écran qui expliquent ton problème dans ton texte. Et n'oublie pas de nous donner ce que tu as déjà fait en terme de code (avec les balises codes => # sur la console) pour que nous puissions voir où tu en es.

    Est-ce que ta question consiste à savoir comment manipuler une colonne donnée en VBA ?
    Si c'est le cas, sans vouloir te vexer, mais pour t'aider à progresser, je te conseille de lire quelques tutos de VBA, car c'est une opération "de base" dans VBA.
    Autre tuto, sur ce site : https://laurent-ott.developpez.com/t...el-vba-tome-1/
    Pour répondre à ta question, la fonction pour manipuler des cellules est Range ou Cells. On utilise ces syntaxes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A3")    'pour désigner la cellule A3
    Cells(3, 1)    'pour désigner la cellule A3 (ligne 3, colonne 1)
    => Ceci peut être intéressant à lire : https://www.developpez.net/forums/d5...e-range-cells/

    Pour manipuler des colonnes, on peut utiliser Range aussi ou Columns :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A:A")    'pour désigner la colonne A
    Columns(1)     'pour désigner la colonne A (1ère colonne)
    Exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim celluleTrouvee as Range
    Set celluleTrouvee = Range("A:A").Find("toto")
    celluleTrouvee correspond à la 1ère cellule dans laquelle on trouve "toto".

    Est-ce que ta question consiste à savoir comment mettre une colonne variable dans Range ou Columns ?
    Si c'est le cas, désolée... mais c'est assez basique aussi => à lire absolument : https://silkyroad.developpez.com/VBA/LesVariables/
    Un exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim leNumColonne As Integer      'un nombre entier !
    Dim laColonne As Range
    leNumColonne = 3          'c'est ton nombre variable pour la colonne, ici exemple avec 3 (colonne C)
    Set laColonne = Columns(leNumColonne)
    Est-ce que ça te permet d'avancer ?

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Aschme Voir le message
    Je cherche a balayer plusieurs feuilles d'un classeur pour récupérer des données spécifiques. Book1.xlsx
    Beaucoup de participants actifs à ce forum n'ouvrent pas les fichiers joints.

    J'ai tous les outils pour balayer mon classeur avec une boucle FOR
    Tu aurais dû montrer ton code, de préférence entre balises CODE.

    En effet, je voudrais par le biais d'un userform pouvoir "sélectionner" une colonne bien spécifique, dans le fichier en exemple, si je tape 1 dans mon userform, je voudrais analyser que la colonne B, si je tape 2 la colonne C etc.etc.
    Pourquoi un UserForm ?
    S'il s'agit juste d'indiquer une valeur, il serait plus judicieux d'utiliser une simple InputBox.
    Lire ceci : https://docs.microsoft.com/fr-fr/off...utbox-function
    C'est plus simple, plus pratique et plus rapide aussi bien pour le développeur que pour l'utilisateur.

    En supposant que tu mettes le résultat de cette valeur dans une variable nommée MaCol (tu peux utiliser un autre nom, bien sûr), tu pourras désigner la colonne en question par Columns(MaCol).

    L'idée étant au final de compter le nombre d’occurrence de tel ou tel critère (Un nb.si.ens qui viendrait récupérer le nombre de toto
    Pour utiliser une fonction Excel dans VBA, tu peux utiliser WorksheetFunction ou Evaluate.
    Lire ceci :
    https://docs.microsoft.com/fr-fr/off...ksheetfunction
    https://docs.microsoft.com/fr-fr/off...ation.evaluate

    Attention : dans les deux cas, il faut utiliser la version anglaise de la fonction, donc, dans ton cas, COUNTIFS().

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Dev
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Par défaut
    J'avoue que mes compétences en VBA sont assez limitées. (Pas eu de réelle formation jusqu'alors : /)
    Pour la question sur la inputbox, je ne connais juste pas cet outils.

    Pour l'instant j'en suis la, j'ai du mal a comprendre comment récupérer la variable concernant ma colonne sur la cellule trouvée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub CommandButton1_Click()
     
    Dim sh As Worksheet
    Dim shSynthese As Worksheet
    Dim crit1 As String
    Dim crit2 As String
    Dim crit3 As String
    Dim crit4 As String
    Dim crit5 As String
    Dim crit6 As String
    Dim crit7 As String
    Dim crit8 As String
    Dim ilg As Integer
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As String
    ilg = 23
    crit1 = "EBO"
    crit2 = "AVP / CTO"
    crit3 = "Etude"
    crit4 = "CED"
    crit5 = "RAO"
    crit6 = "DA"
    crit7 = "Réal"
    crit8 = "CQR"
    Set shSynthese = ThisWorkbook.Sheets("PLAN DE CHARGE GLOBAL")
     
    If Controls("OptionButton1").Value = True Then
     
    'For Each sh In ThisWorkbook.Worksheets
     
     
    'on recherche la cellule contenant le chiffre que l'on a écrit dans le userform / inputbox
    Set PlageDeRecherche = Sheets("PLAN DE CHARGE CDR").Range("K1:BS49")
    Valeur_Cherchee = TextBox1.Value
    Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
    //Il me manque la formule pour récupérer la position de la colonne de la cellule
    'Il faut récupérer la position de la colonne de la cellule contenant la valeur cherchée
    'shSynthese.Cells(ilg, 2) = Application.WorksheetFunction.CountIfs("K8:K40";crit1;"G8:G40";"Edouard")
    Auriez vous une idée du code a écrire à la ligne 36 ? L'idée est de remplacer le K8 et le K40 dans la dernière ligne par " "VariableColonne", Ligne 8: "VariableColonne", Ligne40 ".
    D'avance merci.

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Aschme Voir le message
    Pour la question sur la inputbox, je ne connais juste pas cet outils.
    C'est la raison pour laquelle je t'ai donné un lien vers l'aide qui explique son usage.

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    Est-ce que crit1, crit2 etc. sont amenés à changer ? Pourquoi passes-tu par des variables et pourquoi n'inscris-tu pas directement les valeurs dans les fonctions ?
    Bon ça n'a rien avoir avec le schmilblick, mais je m'interrogeais

    Pour répondre à ta question => à lire : https://docs.microsoft.com/fr-fr/off...l.range.column C'est dommage, tu avais fait le plus dur
    Pour l'utilisation des variables, je te renvoie à https://silkyroad.developpez.com/VBA/LesVariables/. En prêtant bien attention aux endroits où tu mets les guillemets ! Ou alors tu utilises Cells (ce serait mieux, en fait ...). N'hésites pas à faire des tests sur une fonction simple avant de le faire dans ta fonction finale.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim col As Integer
    MsgBox Cells(3, col)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Dev
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Par défaut
    Merci beaucoup pour les conseils et infos en tout cas. Ça fait drôlement plaisir

    A dire vrai, je ne sais pas si ils vont évoluer dans le futur. Dans le doute j'ai retiré tout ça et mit les valeurs cherchées en dur.

    Ça fonctionne presque ! J'ai mis de coté la boucle FOR pour l'instant je cherche a faire fonctionner le schmilblick sur une seule feuille.

    J'ai une question néanmoins ! Le code me renvoi actuellement 1 dans la case sur ma feuille de synthèse, or si je regarde dans ma table de donnée, j'ai deux fois la mention "DA" sur la semaine 45 (J'ai tapé 45 dans mon textbox) et donc ma formule devrait m'inscrire "2" dans le case de ma synthèse.

    Auriez vous une idée d’où j'ai pu me tromper ? Je pense que c'est dans mon countifs que j'ai du me gourer, mais je n'en suis pas sur (j'ai tagué en jaune la partie que je pense qui fait défaut)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Sub CommandButton1_Click()
    
    Dim sh As Worksheet
    Dim shSynthese As Worksheet
    Dim ilg As Integer
    Dim Col As Integer
    Dim L1 As Integer
    Dim L2 As Integer
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As String
    ilg = 23
    Set shSynthese = ThisWorkbook.Sheets("PLAN DE CHARGE GLOBAL")
    
    
    If Controls("OptionButton1").Value = True Then
    
    Set PlageDeRecherche = Sheets("PLAN DE CHARGE CDR").Range("K1:BS49")
    Valeur_Cherchee = TextBox1.Value
    Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
    Col = Trouve.Column
    
    shSynthese.Cells(ilg, 2) = WorksheetFunction.CountIfs(Sheets("PLAN DE CHARGE CDR").Range(Col & "8:" & Col & "40"), "DA")

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Aschme Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Col = Trouve.Column
    
    shSynthese.Cells(ilg, 2) = WorksheetFunction.CountIfs(Sheets("PLAN DE CHARGE CDR").Range(Col & "8:" & Col & "40"), "DA")
    La propriété Column renvoie une valeur numérique et non une lettre.
    Pour une adresse spécifiée sous forme litérale dans un Range, il faut utiliser des lettres pour désigner les colonnes.

    Pour éclairer cette explication d'un exemple, si la colonne trouvée est la colonne E (donc 5), ton Range fera référence aux lignes 58 à 540 et non à la zone E8:E40.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Dev
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Par défaut
    C'est bon ca fonctionne ! J'ai remplacé le bout de code qui me genait par ca et tout marche bien !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1:BS49").Columns(Col)
    Merci beaucoup pour le coup de pouce !

  10. #10
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Aschme Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1:BS49").Columns(Col)
    Ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1:A49").Offset(0, Col - 1)
    Mais... bon... les goûts et les couleurs, ça ne se discute pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 33
    Dernier message: 19/10/2012, 18h50
  2. [XL-2007] VBA - Key Avec Recherche Colonne
    Par tixilee dans le forum Excel
    Réponses: 2
    Dernier message: 07/09/2012, 15h51
  3. [VBA] Passer de cellules à colonnes spécifiques
    Par Stanyslas dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/07/2012, 11h23
  4. [XL-2003] VBA Rechercher colonne
    Par Maiden002 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/08/2009, 17h17
  5. Recherche d'une cellule à l'intersection de colonne en vba
    Par mattetienne dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/08/2009, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo