Insérer une colonne à côté du critère

Bonjour à tous,

J'ai un petit soucis dans ma macro...

Mon objectif est le suivant : je souhaite insérer trois colonne à côté de mon critère de recherche basé sur un mot contennu dans une cellule (ex : la cellule contient "UA - exemple de recherche", je souhaite que ma recherche VBA cherche simplement "UA").

Là où je bloque c'est :

  • création d'une colonne adjacente après avoir cherché la cellule répondant à mon critère de recherche
  • faire répéter le code

Auriez-vous une solution à mon problème svp?

Je vous joins mon fichier et vous remercie par avance de votre aide !

Bonjour,

Je ne sais pas trop quel est ton problème, surtout en écrivant crtières et cherchant critères... !

Mais pour écrire du code on se réfère à la syntaxe...

Sub UA_colonne()
    Dim UA As Integer, i As Integer
    With ActiveSheet
        UA = .Cells(2, .Columns.Count).End(xlToLeft).Column
        Application.ScreenUpdating = False
        For i = UA To 6 Step -1
            If .Cells(2, i) = "Texte de crtières" Then
                .Columns(i).Insert
            End If
        Next i
    End With
End Sub

Notes :

1) On déclare toutes ses variables (de préférence).

2) Un feuille comporte 16384 colonnes, le type Long est nécessaire (pour éviter un dépassement de capacité), si on dépasse 32767.

3) On qualifie ses expression pour éviter de produire un code approximatif, dont le résultat risquerait d'être modifié par un changement de contexte, et même hors ce cas la qualification rendra l'exécution plus rapide.

4) Dès lors que l'action réalisée a des répercussions sur l'affichage, on inhibe le raffraîchissement de l'écran afin d'accélérer l'exécution.

5) Lorsque l'on utilise une boucle For... Next pour parcourir des lignes ou des colonnes, avec une action en cours de boucle qui modifie le nombre de lignes ou de colonnes, on fait le parcours à l'envers (en désincrémentant au lieu d'incrémenter) afin de garantir que toutes les lignes ou colonnes définies au départ seront parcourues.

6) Un test étant effectué à chaque tour de boucle, le doubler par une recherche avec Find (mal définie, mais c'est un autre point de discussion) est un mélange de genre dont le résultat a toutes chances d'être inattendu !

7) Si on doit insérer une colonne, on le fait avec la commande permettant d'insérer une colonne (entière) au lieu d'insérer une cellule.

8 ) L'objectif est en outre mal défini, car à côté cela peut être aussi bien avant qu'après, et il vaudrait mieux être précis en la matière.

9) Accessoirement (mais ce n'est pas sans importance, on indente son code (de préférence selon des règles), pour en assurer une parfaite lisibilité.

Cordialement.

Bonjour MFerrand,

Je te remercie de ton aide et de tes explications. Il est vrai que je commence tout juste le VBA et que je suis en plein apprentissage. Mon VBA peut en faire surprendre plus d'un

En testant le code corrigé et en le tâtonnant, j'ai deux questions qui me viennent à l'esprit:

  • Pour créer 3 colonnes j'ai triché en écrivant 3 fois la lignes .Columns(i).Insert... Existerait-il une autre façon d'écrire cette consigne (créer 3 nouvelles colonnes) que de copier 3 fois la consigne ".Columns(i).Insert"...
  • Je n'arrive pas à repérer où est la consigne qui dit de quel côté on insère les fameuses colonnes... A savoir, si j'insère sur la droite ou sur la gauche de ma cellule de référence (où qui comporte mon critère de recherche).

Merci par avance

Une colonne (comme une ligne) s'insère à la place de celle que tu indiques pour l'insertion, elle prend sa place. C'est à dire que si le test d'insertion aboutit lorsque i = 6, en insérant en i, la colonne insérée sera la 6e et l'ancienne 6e deviendra la 7e.

L'insertion se fait donc à gauche de la colonne désignée (de même une ligne insérée s'insère au-dessus de la ligne indiquée).

Si tu veux insérer à droite de la colonne trouvée à partir du test, il faut réaliser l'insertion sur la colonne suivante (soit i+1).

Tu peux insérer simultanément plusieurs colonnes (comme plusieurs lignes). Par exemple : ...Columns("D:F").Insert insèrera 3 colonnes qui prendront les positions D E F (les anciennes D E F se retrouveront en G H I).

Mais la boucle te fournissant avec i un numéro de colonnes, la formulation d'un regroupement en un seule commande avec des numéros ne fonctionnera pas (il faudrait y substituer les lettres dont tu ne disposes pas...). La fomulation pourrait donc passer par une plage de cellules étendue à la colonne :

. Cells(1, i).Resize(, 3).EntireColumn.Insert par exemple.

Pour faire passer l'insertion à droite, comme on l'a dit, i+1...

Mais dans la mesure où tu n'en as pas des centaines à insérer, la répétition de la commande (éventuellement au moyen d'une boucle de 1 à 3 qui ne fera qu'assurer la répétition, mais ça fait toujours 3 lignes à écrire, c'est donc un peu indifférent...) 3 fois.

Cordialement.

Rechercher des sujets similaires à "inserer colonne cote critere"